我有两个浮动列表A
和B
。它们大小相同。我想在它们之间打印k-top错误(abs(A-B))
。例如
A=[1,2,3,4], B=[3,0.5,2.5,3.85]
。然后k = 3的k-top误差将显示为
k_top error (k=3)
A=1, B=3, error=2
A=2, B=0.5, error=1.5
A=3, B=2.5, error=0.5
这就是我做的事情
error=[]
for i in range (len(A)):
error.append(math.abs(A[i]-B[i])
答案 0 :(得分:3)
如果您想获得k-top
最大差异,请使用sorted方法与built-in
zip函数结合使用。
另外,使用lambda
函数对按error
值递减的列表进行排序。
sorted_list = sorted([[a, b, abs(a - b)]for (a, b) in zip(A, B)], reverse=True, key=lambda x: x[2])[:3]
for i in sorted_list:
print('A = {0}, B = {1}, error = {2}'.format(str(i[0]),str(i[1]),str(i[2])))
输出
A = 1, B = 3, error = 2
A = 2, B = 0.5, error = 1.5
A = 3, B = 2.5, error = 0.5
答案 1 :(得分:2)
这是你想要的吗?
from itertools import product
print(sorted([abs(a - b) for (a, b) in product(A, B)], reverse=True)[:3])
# [3.5, 2.85, 2.5]
答案 2 :(得分:2)
def kError(A,B,k = 2):
# return sorted([(a,b,round(abs(a-b),2)) for a,b in zip(A,B)],
# reverse=True, key = lambda x:x[2])[:k]
return sorted([(a,b,abs(a-b)) for a,b in zip(A,B)],
reverse=True, key = lambda x:x[2])[:k]
A = [1,2,3,4]
B = [2,1.5,0.5,3.85]
k = 2
for a,b,d in kError(A,B,k):
print(f'A:{a} B:{b} err:{d}')
输出:
A:3 B:0.5 err:2.5
A:1 B:2 err:1
如果遇到浮点错误(更改为注释版本),您可能想要完善。
答案 3 :(得分:1)
你应该能够遍历列表的第一个k
元素,对吧?
def top_k_error(A, B, k):
if len(A) < k or len(A) != len(B):
return
for i in range(k):
a = A[i]
b = B[i]
error = abs(A[i] - B[i])
print("A={}, B={}, error={}".format(a, b, error) )