nonzero(a),where(a)和argwhere(a)之间的差异。什么时候使用?

发布于 2021-01-29 17:48:12

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

  • argwhere文档上说:

np.argwhere(a)与相同np.transpose(np.nonzero(a))

为什么要有一个只对输出进行转置的函数nonzero?什么时候如此有用以至于它应该具有单独的功能?

  • where(a)和之间有什么区别nonzero(a)?他们不会返回完全相同的结果吗?
关注者
0
被浏览
46
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    nonzeroargwhere两个就给大家介绍其中数组中的元素信息True
    where的工作方式与nonzero您发布的表单相同,但是具有第二种形式:

    np.where(mask,a,b)
    

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

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

    (具有适当的广播ab)。

    至于有 nonzeroargwhere,他们是不同的概念。
    nonzero构造为返回可用于索引的对象。如果0稀疏,则比创建整个布尔蒙版更轻巧:

    mask = a == 0  # entire array of bools
    mask = np.nonzero(a)
    

    现在,您可以使用该掩码对其他数组等进行索引。但是,就目前而言,弄清哪些索引对应于0个元素并不是很好。那就是argwhere进来的地方。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看