用 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 个值。
我有一个包含这样数字的数组,在本例中有 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 个值。