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

发布于 2021-01-29 16:28:15

如果我有一个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()工作,这是不可能的吗?

关注者
0
被浏览
530
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这里的问题是,当将两个numpy数组与==进行比较时,如remove()和index()方法中那样,将返回一个numpy布尔值数组(逐元素比较),该数组被解释为模棱两可。比较两个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化。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看