比较多个numpy数组

Jay*_*ddy 6 python arrays numpy

我应该如何比较2个以上的numpy阵列?

import numpy 
a = numpy.zeros((512,512,3),dtype=numpy.uint8)
b = numpy.zeros((512,512,3),dtype=numpy.uint8)
c = numpy.zeros((512,512,3),dtype=numpy.uint8)
if (a==b==c).all():
     pass
Run Code Online (Sandbox Code Playgroud)

这给出了一个valueError,我对一次比较两个数组不感兴趣.

Els*_*ere 6

为了扩展之前的答案,我将使用combinationsfromitertools来构造所有对,然后对每对进行比较。例如,如果我有三个数组并想确认它们都相等,我会使用:

from itertools import combinations

for pair in combinations([a, b, c], 2):
    assert np.array_equal(pair[0], pair[1])
Run Code Online (Sandbox Code Playgroud)

  • 没错!这显然是低效的。只是一种直观/透明地将每个项目与其他项目进行比较的方法。 (3认同)

Div*_*kar 5

对于三个数组,您可以检查第一数组和第二数组之间的元素之间是否相等,然后检查第二数组和第三数组之间的相等性,以便为我们提供两个布尔标量,最后查看这两个标量是否都True用于最终标量输出,如下所示-

np.logical_and( (a==b).all(), (b==c).all() )
Run Code Online (Sandbox Code Playgroud)

对于更多数量的数组,您可以堆叠它们,沿堆叠轴获取微分,然后检查所有这些微分是否等于零。如果它们是,我们在所有输入数组之间具有相等性,否则就没有相等性。实现看起来像这样-

L = [a,b,c]    # List of input arrays
out = (np.diff(np.vstack(L).reshape(len(L),-1),axis=0)==0).all()
Run Code Online (Sandbox Code Playgroud)


use*_*ica 5

对于三个数组,您实际上应该一次将它们两个进行比较:

if np.array_equal(a, b) and np.array_equal(b, c):
    do_whatever()
Run Code Online (Sandbox Code Playgroud)

对于可变数量的数组,让我们假设它们全部组合成一个大数组arrays。那你可以做

if np.all(arrays[:-1] == arrays[1:]):
    do_whatever()
Run Code Online (Sandbox Code Playgroud)