如何在python中的两个列表之间获得k-top错误?

时间:2018-04-20 07:23:43

标签: python python-3.x list

我有两个浮动列表AB。它们大小相同。我想在它们之间打印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])

4 个答案:

答案 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) )