在Numpy中, nonzero(a) where(a) argwhere(a) a是一个numpy数组,似乎都返回该数组的非零索引。这三个电话之间有什么区别?

  • 有关argwhere的文档说:



    为什么会有一个整个函数只是转置nonzero的输出?什么时候如此有用以至于它应该具有单独的功能?
  • where(a)nonzero(a)之间的区别是什么?他们不会返回完全相同的结果吗?
  • 最佳答案

    nonzeroargwhere都为您提供有关元素在数组中True的位置的信息。 wherenonzero的工作方式相同,但具有第二种形式:

    np.where(mask,a,b)
    

    可以粗略地认为它是条件表达式的numpy“ufunc”版本:
    a[i] if mask[i] else b[i]
    

    (适当地广播ab)。

    nonzeroargwhere而言,它们在概念上是不同的。 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/

    10-12 05:02