在Numpy中, nonzero(a)
, where(a)
和 argwhere(a)
,a
是一个numpy数组,似乎都返回该数组的非零索引。这三个电话之间有什么区别?
argwhere
的文档说:为什么会有一个整个函数只是转置
nonzero
的输出?什么时候如此有用以至于它应该具有单独的功能? where(a)
和nonzero(a)
之间的区别是什么?他们不会返回完全相同的结果吗? 最佳答案
nonzero
和argwhere
都为您提供有关元素在数组中True
的位置的信息。 where
与nonzero
的工作方式相同,但具有第二种形式:
np.where(mask,a,b)
可以粗略地认为它是条件表达式的numpy“ufunc”版本:
a[i] if mask[i] else b[i]
(适当地广播
a
和b
)。就
nonzero
和argwhere
而言,它们在概念上是不同的。 nonzero
的结构是返回一个可用于索引的对象。如果0稀疏,则比创建整个 bool 蒙版更轻巧:mask = a == 0 # entire array of bools
mask = np.nonzero(a)
现在,您可以使用该掩码对其他数组等进行索引。但是,就目前而言,弄清哪些索引对应于0个元素并不是很好。这就是
argwhere
出现的地方。关于python - nonzero(a),where(a)和argwhere(a)之间的差异。什么时候使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15976697/