获取二维数组中特定值的位置

1 投票
2 回答
1771 浏览
提问于 2025-04-18 05:52

我需要一些帮助,想要找出一个二维数组中所有符合特定条件的值(坐标)。

一开始,我尝试把我的二维数组转换成一维数组,这样我能得到在一维数组中的位置,但这样做似乎很难找到正确的位置,而且在转换回二维数组时也不太“安全”...

有没有办法在不进行一维转换的情况下找到这些值呢?谢谢大家的帮助!

举个例子:

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)]

撰写回答