tf.where与np.where用法详解

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,没有xy,则输出满足条件(即非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/

发布了29 篇原创文章 · 获赞 8 · 访问量 2683

猜你喜欢

转载自blog.csdn.net/HaoZiHuang/article/details/105071367