关于python:你如何从numpy数组列表中删除一个numpy数组?

How do you 'remove' a numpy array from a list of numpy arrays?

如果我有一个numpy数组列表,那么使用remove方法返回一个值错误。

例如:

1
2
3
4
5
import numpy as np

l = [np.array([1,1,1]),np.array([2,2,2]),np.array([3,3,3])]

l.remove(np.array([2,2,2]))

会给我

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

我似乎不能让所有的东西都发挥作用,这是不可能的吗?


这里的问题是,当将两个numpy数组与==进行比较时,就像在remove()和index()方法中一样,返回一个numpy布尔值数组(逐元素比较),这被解释为不明确。比较两个numpy数组是否相等的一个好方法是使用numpy的array_equal()函数。

由于lists的remove()方法没有key参数(就像sort()那样),所以我认为您需要创建自己的函数来实现这一点。这是我做的:

1
2
3
4
5
6
7
8
9
def removearray(L,arr):
    ind = 0
    size = len(L)
    while ind != size and not np.array_equal(L[ind],arr):
        ind += 1
    if ind != size:
        L.pop(ind)
    else:
        raise ValueError('array not found in list.')

如果你需要更快的速度,那么你可以用赛马术来训练它。


干得好:

1
list.pop(1)

更新:

1
list.pop(list.index(element))

我认为你不能绕过遍历列表来找到元素的位置。别担心。默认情况下,python会使用一个好的搜索算法来查找它,这对您来说至少是成本。