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会使用一个好的搜索算法来查找它,这对您来说至少是成本。