np.where(condition, [x, y])有两种用法:
1.Return elements chosen from x
or y
depending on condition
.
(即满足条件(condition)
,输出x
,不满足输出y
)
>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> # 数组中小于5的元素留下,大于等于5的元素变为原来的10倍
>>> np.where(a < 5, a, 10*a)
array([ 0, 1, 2, 3, 4, 50, 60, 70, 80, 90])
2.When only condition
is provided, this function is a shorthand for np.asarray(condition).nonzero()
.
(只有条件 condition
,没有x
和y
,则输出满足条件(即非0)元素的坐标 (等价于np.asarray(condition).nonzero()
)。这里的坐标以tuple
的形式给出,通常原数组有多少维,输出的tuple中就包含几个数组,分别对应符合条件元素的各维坐标。)
>>> a = np.arange(1, 13)
>>> a
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
>>> np.where(a > 5)
(array([ 5, 6, 7, 8, 9, 10, 11]),)
>>> # 可以看出是以元组的形式返回满足条件的元素的索引(也就是坐标)
再来一个二维的例子:
>>> a = np.arange(0, 12).reshape(3, 4)
>>> a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> np.where(a > 6)
(array([1, 2, 2, 2, 2]), array([3, 0, 1, 2, 3]))
>>> # 可以看到,返回的元组里有两个元组,分别对应着每个满足条件的行索引和列索引(即坐标)
而tf.where(condition, x=None, y=None, name=None)用法与np.where(condition, [x, y])大体相同
小区别呢,也有:
tensor
, 一个传入ndarray
tensor
, 一个返回ndarray
(废话[滑稽])tf.where
还有个参数name
,意思是: The name of the operation (optional).,就是该操作的名字,一般会在tensorboard
中才会用到,小白可以先不用管参考链接:
Numpy文档:https://www.numpy.org.cn/reference/
tensorflow文档:https://www.tensorflow.org/api_docs/python/