你如何从numpy数组列表中删除一个numpy数组?

mat*_*t_s 11 python numpy

如果我有一个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]))
Run Code Online (Sandbox Code Playgroud)

会给我的

ValueError:具有多个元素的数组的真值是不明确的.使用a.any()或a.all()

我似乎无法让all()工作,这是不可能的吗?

Jus*_*eel 11

这里的问题是当两个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.')
Run Code Online (Sandbox Code Playgroud)

如果你需要它更快,那么你可以Cython-ize它.