如何从numpy数组列表中删除一个numpy数组?
如果我有一个numpy数组列表,那么使用remove方法会返回一个值错误。如何从numpy数组列表中删除一个numpy数组?
例如:
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的array_equal()函数。因为列表的remove()方法没有关键参数(如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它。
谢谢,非常有用! – 2010-07-02 09:50:24
在这里你去:
list.pop(1)
更新:
list.pop(list.index(element))
我不认为你可以绕过遍历列表来查找元素的位置。不要担心。默认情况下,Python会使用一个好的搜索算法来为您找到至少成本。
谢谢,我意识到这适用于我的示例,但实际上我需要这样做,我不知道我想要删除的数组的位置。我认为使用remove方法可能会有更好的方式,而不是使用循环。 – 2010-07-01 12:49:47
感谢您帮助我。如果我使用list.index()作为numpy数组,我会再次得到模糊的真值错误,嗯。 – 2010-07-01 13:11:59
就这么你知道,使用'list'作为变量并不是一个好主意,因为它是Python中的关键字。它可能会在稍后回来咬你。 – 2010-07-01 17:40:22
是的,谢谢,我在玩弄时试图解决这个问题,使用list()然后使用remove等将数组转换为列表。 – 2010-07-02 10:24:54