计算数组n个等长列表的平方差

2024-09-20 07:32:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图设计一个函数,基本上计算等长列表的平方差,基于这些列表的组合,通过公式[n(n-1)]/2:

因此,对于我的数据:

arr = np.array([[10, 20, 30, 40],  #list_1
                [11, 12, 13, 14],  #list_2
                [22, 23, 25, 27],  #list_3
                [12, 19, 24, 78]]) #list_4

我想这样做:

final_arr = ((arr[0] - arr[1])**2 +
             (arr[0] - arr[2])**2 +
             (arr[0] - arr[3])**2 +
             (arr[1] - arr[2])**2 +
             (arr[1] - arr[3])**2 +
             (arr[2] - arr[3])**2)

输出:

list(final_arr) = [371, 260, 616, 9155]

正如您所看到的,它基本上是所有6 ([(4*3)/2] = 6)列表的组合,即

[(list_1, list_2), (list_1, list_3), (list_1, list_4), (list_2, list_3), (list_2, list_4), (list_3, list_4)]

我正在尝试为包含n个等长列表的数组构建一个函数


Tags: 数据函数列表np数组arraylistfinal
1条回答
网友
1楼 · 发布于 2024-09-20 07:32:56

您可以使用itertools.combinationszip

from itertools import combinations

lists = [list_1, list_2, list_3, list_4]
for x in zip(*lists):
    print(sum((c[0] - c[1]) ** 2 for c in combinations(x, 2)))

输出:

371
260
616
9155

使用numpy.apply_along_axis

fun = lambda x: sum((c[0] - c[1]) ** 2 for c in combinations(x, 2))
res = np.apply_along_axis(fun, 0, arr)
print(list(res))

输出:

[371, 260, 616, 9155]

相关问题 更多 >