获取2d数组的特定值的位置

时间:2014-05-08 17:16:00

标签: python conditional coordinates multidimensional-array

我需要一些帮助来检测2D数组的所有值(坐标),以验证特定的条件。

一开始,我尝试将我的二维阵列转换为一维,我得到了 1D阵列中的迭代(位置)但似乎很难 找到好位置而不是非常安全"当我在2D中重新转换时......

没有一维转换可以检测到吗? 谢谢你的帮助!

例如:

import numpy as np

test2D = np.array([[  3051.11,   2984.85,   3059.17],
       [  3510.78,   3442.43,   3520.7 ],
       [  4045.91,   3975.03,   4058.15],
       [  4646.37,   4575.01,   4662.29],
       [  5322.75,   5249.33,   5342.1 ],
       [  6102.73,   6025.72,   6127.86],
       [  6985.96,   6906.81,   7018.22],
       [  7979.81,   7901.04,   8021.  ],
       [  9107.18,   9021.98,   9156.44],
       [ 10364.26,  10277.02,  10423.1 ],
       [ 11776.65,  11682.76,  11843.18]])

a,b = test2D.shape

test1D = np.reshape(test2D,(1,a*b))

positions=[]

for i in range(test1D.shape[1]):
    if test1D[0,i] > 5000.:
        positions.append(i)

print positions

因此,对于这个例子,我的输入是2D数组" test2D"我希望所有坐标都验证条件> 5000作为列表。

2 个答案:

答案 0 :(得分:4)

如果你想要职位,请使用类似

的内容
positions = zip(*np.where(test2D > 5000.))

Numpy.where

这将返回

In [15]: zip(*np.where(test2D > 5000.))

Out[15]: 
[(4, 0),
 (4, 1),
 (4, 2),
 (5, 0),
 (5, 1),
 (5, 2),
 (6, 0),
 (6, 1),
 (6, 2),
 (7, 0),
 (7, 1),
 (7, 2),
 (8, 0),
 (8, 1),
 (8, 2),
 (9, 0),
 (9, 1),
 (9, 2),
 (10, 0),
 (10, 1),
 (10, 2)]

答案 1 :(得分:0)

通常,当您使用numpy.array时,您可以在花式索引中使用条件。例如,test2D > 5000将返回一个与test2D具有相同尺寸的布尔数组,您可以使用它来查找条件为真的值:test2D[test2D > 5000]。不需要任何其他东西。您可以简单地使用布尔数组来索引除相同形状的test2D之外的其他数组,而不是使用索引。 Have a look here