我需要比较两个仅由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)
显然,在所有情况下,您都应该始终检查/注意如果A
和B
具有不同的长度会发生什么(例如,如果len(v1) > len(v2)
,我刚刚共享的代码将返回IndexError
;在这方面,zip
在不同版本的python中表现不同(