繁体   English   中英

从数组列表中删除数组Python

[英]Delete array from list of arrays Python

我想以这种方式从数组列表中删除数组

i = np.array([1,2])
facets = [np.array([1,2]),np.array([3,4])]

我想删除一个元素

facets.remove(np.array(i[0],i[1]))

但得到一个错误:

ValueError                                Traceback (most recent call last)
<ipython-input-131-c0d040653e23> in <module>()
----> 1 facets.remove([i[0],i[2]])

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

有办法解决这个问题吗?

考虑以下示例:

ls = [1, 2, 3, 1]
ls.remove(1)

此代码的作用类似于:

  1. 遍历ls的元素。
  2. 检查每个元素是否等于1
  3. 如果是这样,它将弹出该元素,并中断迭代。

在步骤2中,您的代码尝试比较两个numpy数组,例如array1 == array2 问题在于numpy会为此比较返回一个真值数组。

>>> np.array([1,2]) == np.array([1,3])
array([ True, False], dtype=bool)

因此,您将必须实现自己的类似remove的方法。

def remove_from_array(base_array, test_array):
    for index in range(len(base_array)):
        if np.array_equal(base_array[index], test_array):
            base_array.pop(index)
            break
    raise ValueError('remove_from_array(array, x): x not in array')

用法:

i = np.array([1,2])
facets = [np.array([1,2]),np.array([3,4])]
remove_from_array(facets, i)

print facets # [array([3, 4])]

最简单的方法是使用all()将列表的每个元素与要删除的元素进行比较,然后返回所有不匹配的元素。 请注意,这将删除列表中与要删除的数组匹配的所有元素。

[ x for x in facets if not (x==i).all()]

请尝试以下方法:

facets.remove(np.array(i[0],i[1]))

这为我工作如下:

>>> i = list([1,2])
>>> facets = [list([1,2]),list([3,4])]
>>> facets.remove(list([i[0],i[1]]))
>>> facets
[[3, 4]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM