测试数组是否为数组的一部分并将其删除

时间:2018-11-08 10:06:24

标签: python arrays python-3.x numpy

我有以下数组数组:

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

是什么意思?

1 个答案:

答案 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.allclosenp.apply_along_axis结合使用:

def test_close(b):
    return np.allclose(test, b)

res = a[~np.apply_along_axis(test_close, 1, a)]