逐元素比较Python



我需要比较两个仅由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)

显然,在所有情况下,您都应该始终检查/注意如果AB具有不同的长度会发生什么(例如,如果len(v1) > len(v2),我刚刚共享的代码将返回IndexError;在这方面,zip在不同版本的python中表现不同(

相关内容

  • 没有找到相关文章

最新更新