【问题标题】:Check if list of numpy arrays are equal检查numpy数组列表是否相等
【发布时间】:2016-09-13 21:05:36
【问题描述】:

我有一个 numpy 数组列表,并想检查所有数组是否相等。最快的方法是什么?

我知道 numpy.array_equal 函数 (https://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.array_equal.html),但据我所知,这仅适用于两个数组,我想检查 N 个数组。

我还找到了这个答案来测试列表中的所有元素:check if all elements in a list are identical。 但是,当我在接受的答案中尝试每种方法时,我得到一个异常(ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all())

谢谢,

【问题讨论】:

  • 你的数组是整数还是浮点数?有很多关于 ValueError 的问题。看看其中的几个。

标签: python arrays numpy


【解决方案1】:

您可以简单地 adapt a general iterator method 进行数组比较

def all_equal(iterator):
  try:
     iterator = iter(iterator)
     first = next(iterator)
     return all(np.array_equal(first, rest) for rest in iterator)
  except StopIteration:
     return True

如果这不起作用,则意味着您的数组相等。

演示

>>> i = [np.array([1,2,3]),np.array([1,2,3]),np.array([1,2,3])]
>>> print(all_equal(i))
True
>>> j = [np.array([1,2,4]),np.array([1,2,3]),np.array([1,2,3])]
>>> print(all_equal(j))
False

【讨论】:

    【解决方案2】:

    如果您的数组大小相同,则使用numpy_indexed(免责声明:我是其作者)的解决方案应该可以工作并且非常有效:

    import numpy_indexed as npi
    npi.all_unique(list_of_arrays)
    

    【讨论】:

      【解决方案3】:

      您可以在列表推导中使用np.array_equal() 将每个数组与第一个数组进行比较:

      all([np.array_equal(list_of_arrays[0], arr) for arr in list_of_arrays])
      

      【讨论】:

        【解决方案4】:

        我猜你可以使用独特的功能。

        http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.unique.html#numpy.unique

        如果数组中的所有子数组都相同,则应该只返回一项。

        这里更好地描述了如何使用它。

        Find unique rows in numpy.array

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-12-27
          • 2021-11-15
          • 1970-01-01
          • 2020-09-15
          • 2023-04-07
          • 1970-01-01
          • 2020-02-12
          相关资源
          最近更新 更多