比较多个numpy数组

2022-12-01 04:31:40 发布

您现在位置:Python中文网/ 问答频道 /正文

如何比较两个以上的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

这会产生一个valueError,我不想一次比较两个数组。在


Tags: importnumpyifzerospass数组alldtypevalueerroruint8
3条回答

对于三个数组,可以检查第一个数组和第二个数组之间的对应元素之间的相等性,然后再检查第二个和第三个数组之间的对应元素是否相等,从而得到两个布尔标量,最后看看这两个标量是否都是True的最终标量输出,如下-

np.logical_and( (a==b).all(), (b==c).all() )

对于更多的数组,您可以将它们堆叠起来,沿着叠加轴得到微分,然后检查这些微分的所有是否都等于零。如果是,那么所有输入数组都是相等的,否则就不是。执行情况应该是这样的-

^{pr2}$

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

from itertools import combinations

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

对于三个阵列,一次只需比较两个:

if np.array_equal(a, b) and np.array_equal(b, c):
    do_whatever()

对于可变数量的数组,假设它们都组合成一个大数组arrays。那你就可以了

^{pr2}$