gpt4 book ai didi

python - nonzero(a)、where(a) 和 argwhere(a) 之间的区别。什么时候用哪个?

转载 作者:IT老高 更新时间:2023-10-28 22:05:39 24 4
gpt4 key购买 nike

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

  • 关于 argwhere 的文档说:

    np.argwhere(a) is the same as np.transpose(np.nonzero(a)).

    为什么要有一个完整的函数来转置 nonzero 的输出?什么时候它会如此有用以至于它值得一个单独的功能?

  • where(a)nonzero(a) 的区别是什么?他们不会返回完全相同的结果吗?

最佳答案

nonzeroargwhere 都为您提供有关数组中元素为 True 的位置的信息。 where 与您发布的表单中的 nonzero 相同,但它有第二种形式:

np.where(mask,a,b)

可以粗略地认为是条件表达式的 numpy“ufunc”版本:

a[i] if mask[i] else b[i]

(适本地广播 ab)。

both 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com