Python逐个元素比较

Python comparison element by element

我需要比较两个仅由 0 和 1 组成的数组:

A = [0,1,0,0,1]
B = [1,1,0,0,1]

我想得到不相等的元素个数和百分比,我试过这个代码:

print(numpy.mean(A == B))

但有时当某些元素相等时我得到 0...

要按索引方式获取两个列表中不相等的元素数,您可以这样做:

noneq = sum(i==j for i, j in zip(A, B))

要获得百分比,您可以简单地计算noneq/len(A)noneq/len(B)

您可以使用列表理解来创建索引中的值是否相等的列表,然后计算所述列表的平均值。

numpy.mean([x == y for x, y in zip(A, B)])
import numpy as np

A = np.array([0,1,0,0,1])

B = np.array([1,1,0,0,1])

# number of
(A!=B).sum() #1

# percentage
(A!=B).sum()*100 / A.size

count_nonzero统计满足条件的元素个数

A = np.array([0,1,0,0,1]) 
B = np.array([1,1,0,0,1])
print(np.count_nonzero((A==B) == True))

为百分比使用np.count_nonzero/shape

虽然列表理解始终是最优雅的解决方案——在我看来也是美观的——但我发现以下稍微快一些:

def calc(v1, v2):
    s = 0
    for i, x in enumerate(v1):
        s += x == v2[i]
    return s / len(v1)

显然,在所有情况下,您应该始终 check/be 了解如果 AB 的长度不同(例如,我刚刚分享的代码将 return an IndexError if len(v1) > len(v2); 在这方面,zip 在 python)

的不同版本中表现不同