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

标签 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: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

这是什么意思?

最佳答案

使用数组列表会阻止您利用 NumPy 的矢量化功能。您可以转换为单个数组,这可以解决您的问题:

a = np.array(a)

if test in a:
    print('match found!')

但此时您可以使用 bool 数组进行索引:

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

关于python - 测试数组是否是数组数组的一部分并将其删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53205455/

相关文章:

python - 在 python 中计算大型 numpy 数组的速度和加速度

python - 我对为什么我们不能使用特定方法交换变量感到困惑

python - 在字符串中查找重复的字符组合

python - 从混合中继承分配的属性

python - 将电子邮件数据导入列表在 100 处停止

python - 如何区分数字创建的 PDF 和可搜索的 PDF?

java - 数组未正确输出

Java改变最终数组元素的值

python - 1 个代理的 asyncio 中的信号量/多个池锁 - aiohttp

python - 如何使用模拟来测试 next_day_of_week 函数