【问题标题】:Numpy.Array in Python list?Python列表中的Numpy.Array?
【发布时间】:2011-03-30 15:17:15
【问题描述】:

我有一个 numpy 数组的列表(用作堆栈)。现在我想检查一个数组是否已经在列表中。例如,如果它是元组,我会简单地写一些等同于(1,1) in [(1,1),(2,2)] 的东西。但是,这不适用于 numpy 数组; np.array([1,1]) in [np.array([1,1]), np.array([2,2])] 是一个错误 (ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all())。错误消息在这里对 AFAIK 没有帮助,因为它指的是直接比较数组。

我很难相信这是不可能的,但我想我缺少一些东西。

【问题讨论】:

  • 我很难相信最简单的方法需要 2 个函数调用和 1 个列表理解......这个功能似乎很常见,足以保证它自己的内置函数

标签: python numpy


【解决方案1】:

要测试等于a 的数组是否包含在列表my_list 中,请使用

any((a == x).all() for x in my_list)

【讨论】:

  • 我使用了这个,但我必须让它成为一个列表理解 (np.any([(a == x).all() for x in my_list])) 才能工作。我的想法是它是一个发电机?如果my_list为空,则原来的返回True。
  • any() 在我的回答中是 Python 内置的 any(),而 not numpy.any()。这些是不同的功能!不要使用from numpy import *——它会覆盖几个 Python 内置函数。
  • 哦。我没有导入所有内容,但我不知道有一个名为 any 的 python 内置函数,所以我假设你的意思是 numpy.any。很抱歉造成误会。
  • 使用优化的numpy内部array_equal()函数可能会更好。 any(np.array_equal(a, x) for x in my_list)
  • @fabianegli 您的评论听起来好像这个函数可以更快,而实际上 implementation of that function 与此答案中的代码基本相同,因此您只需使用它添加更多的函数调用开销功能。无论如何,这可能是正确的选择,原因不同:== 将在数组具有不兼容的形状时抛出异常,而array_equal() 将简单地返回False,这可能是也可能不是你想要的。跨度>
【解决方案2】:

如果你在堆栈中寻找完全相同的数组实例而不管数据是否相同,那么你需要这样做:

id(a) in map(id, my_list)

【讨论】:

    【解决方案3】:

    如果您想比较数组的实际内容,Sven 的答案是正确的选择。如果您只想检查列表中是否包含相同的实例,您可以使用

    any(a is x for x in mylist)
    

    一个好处是这适用于所有类型的对象。

    【讨论】:

      【解决方案4】:

      这个呢:

      a = array([1, 1])
      
      l = [np.array([1,1]), np.array([2,2])]
      list(map(lambda x: np.array_equal(x, a), l)
      
      [True, False]
      

      【讨论】:

        【解决方案5】:

        您可以使用tolist()将数组转换为列表,然后进行检查:

        my_list = [[1,1], [2,2]]
        
        print(np.array([1,1]).tolist() in my_list)
        print(np.array([1,2]).tolist() in my_list)
        

        【讨论】:

          猜你喜欢
          • 2023-03-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-08
          • 2019-08-16
          • 2019-07-30
          • 1970-01-01
          • 2018-02-08
          相关资源
          最近更新 更多