获取二维数组中特定值的位置
我需要一些帮助,想要找出一个二维数组中所有符合特定条件的值(坐标)。
一开始,我尝试把我的二维数组转换成一维数组,这样我能得到在一维数组中的位置,但这样做似乎很难找到正确的位置,而且在转换回二维数组时也不太“安全”...
有没有办法在不进行一维转换的情况下找到这些值呢?谢谢大家的帮助!
举个例子:
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
在这个例子中,我的输入是二维数组“test2D”,我想要找出所有符合条件大于5000的坐标,并把它们列成一个列表。
相关问题:
2 个回答
0
一般来说,当你使用 numpy.array 时,可以在花式索引中使用条件。例如,test2D > 5000 会返回一个和 test2D 一样大小的布尔数组,这个数组里的每个值都是“真”或“假”,表示对应位置的值是否大于5000。你可以用这个布尔数组来找到条件为真的值:test2D[test2D > 5000]。这样就不需要其他操作了。你可以直接用这个布尔数组去索引其他和 test2D 形状相同的数组。可以看看这里。
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)]