сделать попарное различие массива с python - PullRequest
0 голосов
/ 29 мая 2020

У меня есть массив с такими числами, в данном случае 5 чисел:

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

Я хотел бы создать массив из 10 элементов, в котором попарная разница всех номеров массива равна настоящее время. На данный момент я использовал вложенный l oop, например:

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]

есть способ "pythoni c" выполнить это? без loopfor или вложенных l oop for?

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

Вы можете использовать combinations во встроенной itertools библиотеке. Например:

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, которая в данном случае возвращает 20 значений.

0 голосов
/ 29 мая 2020

Предполагается, что a - это массив numpy. Приведенное ниже должно работать, но, возможно, существует более эффективное решение, поскольку оно вычисляет разницу в два раза

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