我有一个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:具有多个元素的数组的真值不明确。请使用.any()或.all())
谢谢你,
5条答案
按热度按时间e5nqia271#
您可以简单地使用adapt a general iterator method进行数组比较
如果这不起作用,则意味着您的数组 * 不 * 相等。
flmtquvp2#
可以在列表解析中使用
np.array_equal()
来比较每个数组与第一个数组:8e2ybdfx3#
如果您得阵列大小相同,则此解决方案使用numpy_indexed(免责声明:我是它的作者)应该工作和非常有效:
edqdpe6u4#
@jtr的回答很棒,但我想建议一个稍微不同的替代方案。
首先,我认为使用
array_equal
不是一个好主意,因为你可能有两个浮点数组,也许你最终会有你愿意容忍的非常小的差异,但是array_equal
返回True
当且仅当两个数组具有相同的形状和完全相同的元素时。所以让我们使用allclose
来代替。允许选择满足需要的绝对和相对公差。然后,我将使用内置的
zip
函数,这使得代码更加优雅。代码如下:
tjrkku2a5#
我想你可以使用函数unique。
http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.unique.html#numpy.unique
如果数组中的所有子数组都相同,则只返回一项。
这里更好地描述了如何使用它。
Find unique rows in numpy.array