用 python 对数组进行两两差分

make pairwise difference of array with python

我有一个包含这样数字的数组,在本例中有 5 个数字:

a = array([2.88581812, 2.8930633 , 2.85603976, 2.86739916, 2.85736707])

我想创建一个包含 10 个元素的数组,其中存在数组所有数字的成对差值。 现在我像这样使用嵌套循环:

diffmean = []
for i in range(len(a)-1):
    for j in range(i+1, len(a)):
        diffmean.append(a[i]-a[j])

获取10个元素成对差的列表

    [-0.007245185215707384,
 0.029778354907735505,
 0.018418952746142025,
 0.0284510446999775,
 0.03702354012344289,
 0.02566413796184941,
 0.035696229915684885,
 -0.01135940216159348,
 -0.0013273102077580035,
 0.010032091953835476]

有 "pythonic" 方法来执行此操作吗?没有 loopfor 或嵌套循环 for?

假设a是numpy数组。下面应该可以工作,但也许存在更有效的解决方案,因为这会计算两次差异

np.expand_dims(a, 1) - a
d[np.tril_indices(a.size, k=-1)]

您可以在内置 itertools 库中使用 combinations。喜欢:

from itertools import combinations
a = [2.88581812, 2.8930633 , 2.85603976, 2.86739916, 2.85736707]
diffmean = []
for b,c in combinations(a, 2):
    diffmean.append(b - c)

函数的第二个参数是要合并的元素的数量。该函数是无顺序的,基于顺序的版本是 permutations,在这种情况下 returns 20 个值。