1

我有一个numpy数组:

qv=array([[-1.075, -1.075, -3.   ],
       [-1.05 , -1.075, -3.   ],
       [-1.025, -1.075, -3.   ],
       ..., 
       [-0.975, -0.925, -2.   ],
       [-0.95 , -0.925, -2.   ],
       [-0.925, -0.925, -2.   ]])

我想确定一个数组是否包含在该二维数组中并返回它的索引。

qt=array([-1.  , -1.05, -3.  ])

我可以将两个数组都转换为列表并使用 list.index() 函数:

qlist=qv.tolist()
ql=qt.tolist()
qindex=qlist.index(ql)

但我想避免这样做,因为我认为这会影响性能。

4

1 回答 1

3

这应该可以解决问题,

import numpy as np
np.where((qv == qt).all(-1))

或者

import numpy as np
tol = 1e-8
diff = (qv - qt)
np.where((abs(diff) < tol).all(-1))

当浮点精度问题发挥作用时,第二种方法可能更合适。qt此外,如果您要测试很多,可能会有更好的方法。例如scipy.spatial.KDTree.

于 2013-05-06T23:30:58.280 回答