我需要一些帮助来检测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作为列表。
答案 0 :(得分:4)
如果你想要职位,请使用类似
的内容positions = zip(*np.where(test2D > 5000.))
这将返回
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