我有以下数组数组:
import numpy as np
a = [np.array([52.941, 57.962]),
np.array([52.918, 57.96 ]),
np.array([52.908, 57.958]),
np.array([52.898, 57.957]),
np.array([52.878, 57.953]),
np.array([52.868, 57.952]),
np.array([52.813, 57.941])]
现在,我要测试数组test = np.array([52.908, 57.958])
是否是上述数组的一部分,并删除它是否是数组的一部分。
如何检查并删除它?
我尝试过:
if test in a:
print('okay')
和
a.remove(test)
...但是它不起作用。
我收到以下错误:
ValueError:具有多个元素的数组的真值是 暧昧。使用a.any()或a.all()
是什么意思?
答案 0 :(得分:3)
使用数组的列表会阻止您利用NumPy的矢量化功能。您可以转换为单个数组,这可以解决您的问题:
a = np.array(a)
if test in a:
print('match found!')
但是此时您可以使用布尔数组建立索引:
res = a[~(a == test).all(1)]
array([[ 52.941, 57.962],
[ 52.918, 57.96 ],
[ 52.898, 57.957],
[ 52.878, 57.953],
[ 52.868, 57.952],
[ 52.813, 57.941]])
如果您担心浮点近似,可以将np.allclose
与np.apply_along_axis
结合使用:
def test_close(b):
return np.allclose(test, b)
res = a[~np.apply_along_axis(test_close, 1, a)]