如果我有一个numpy数组列表,那么使用remove方法会返回一个值错误。
例如:
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:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()
我似乎无法让all()工作,这是不可能的吗?
如果我有一个numpy数组列表,那么使用remove方法会返回一个值错误。
例如:
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:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()
我似乎无法让all()工作,这是不可能的吗?
这里的问题是当两个numpy数组与==进行比较时,如remove()和index()方法,返回一个布尔值的numpy数组(元素比较元素),这被解释为不明确。比较两个numpy数组是否相等的好方法是使用numpy的array_equal()函数。
由于list的remove()方法没有key参数(比如sort()),我认为你需要自己创建函数来执行此操作。这是我做的一个:
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.')
如果你需要它更快,那么你可以Cython-ize它。
干得好:
list.pop(1)
更新:
list.pop(list.index(element))
我不认为你可以绕过列表来找到元素的位置。别担心。默认情况下,Python会使用一个好的搜索算法来为您找到它。