【问题标题】:Coordinates of item on NumPy arrayNumPy 数组上项目的坐标
【发布时间】:2011-07-26 03:18:57
【问题描述】:

我有一个 NumPy 数组:

[[  0.   1.   2.   3.   4.]
 [  7.   8.   9.  10.   4.]
 [ 14.  15.  16.  17.   4.]
 [  1.  20.  21.  22.  23.]
 [ 27.  28.   1.  20.  29.]]

我想快速找到特定值的坐标并避免数组上的 Python 循环。例如号码4 开启:

row 0 and col 4
row 1 and col 4
row 2 and col 4

并且搜索函数应该返回一个元组:

((0,4),(1,4),(2,4))

这可以直接通过 NunmPy 的函数来完成吗?

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    如果a 是您的数组,那么您可以使用:

    ii = np.nonzero(a == 4)
    

    ii = np.where(a == 4)
    

    如果你真的想要一个元组,你可以从数组的元组转换为元组的元组,但是 numpy 函数的返回值便于对数组进行其他操作。

    转换为 OP 规范的元组:

    tuple(zip(*ii))
    

    【讨论】:

      【解决方案2】:
      a = numpy.array([[  0.,  1.,  2.,  3.,  4.],
                       [  7.,  8.,  9., 10.,  4.],
                       [ 14., 15., 16., 17.,  4.],
                       [  1., 20., 21., 22., 23.],
                       [ 27., 28.,  1., 20., 29.]])
      print numpy.argwhere(a == 4.)
      

      打印

      [[0 4]
       [1 4]
       [2 4]]
      

      适用于浮点比较的常见注意事项。

      【讨论】:

      • 正如文档中的注释“np.argwhere 的输出不适合索引数组。为此请改用np.where(a)。”
      • @JoshAdel:你认为 OP 为什么要使用它来建立索引?我选择了产生最接近 OP 所需输出的函数。
      • @SvenMarnach:两个都可以,他只是先提到了.where
      • @SvenMarnach:别难过,我还有 17k 代表点数 :-) 但说真的,我还提供了一种获得 OP 所需输出的方法,但我也想指出关于 numpy 如何工作的一些可能对其他人有用的东西。这并不是要敲响您的解决方案,而是一些额外的(以及我认为有用的)信息。
      • @SvenMarnach, @JoshAdel 这也是并发问题的一部分,我认为如果 Google Wave 成功的话 SO 会受益!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-26
      • 1970-01-01
      • 2020-10-20
      • 1970-01-01
      • 2010-12-20
      • 2022-08-19
      • 1970-01-01
      相关资源
      最近更新 更多