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,我对一次比较两个数组不感兴趣.
为了扩展之前的答案,我将使用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)
对于三个数组,您可以检查第一数组和第二数组之间的元素之间是否相等,然后检查第二数组和第三数组之间的相等性,以便为我们提供两个布尔标量,最后查看这两个标量是否都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)
对于三个数组,您实际上应该一次将它们两个进行比较:
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)
| 归档时间: |
|
| 查看次数: |
3658 次 |
| 最近记录: |