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