Как получить сумму значений под диагональю в numpy? - PullRequest
1 голос
/ 04 июня 2019

Для двумерного прямоугольного массива:

a = np.array([
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
])

Я хотел бы взять сумму всех значений от нижней левой до верхней правой диагонали, т.е. 8, 9 и 6.

Каков наилучший способ сделать это?

Метод должен работать и для больших массивов.

Ответы [ 3 ]

2 голосов
/ 04 июня 2019

Вы можете использовать np.flip + np.tril + np.sum:

import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

print(np.sum(np.tril(np.flip(a, 1), -1)))
# 23
1 голос
/ 04 июня 2019

Вы можете вращать, суммировать верхний треугольник и вычитать диагональ.

import numpy as np
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
result = np.triu(np.rot90(a)).sum() - np.trace(a)
#Output: 23
0 голосов
/ 04 июня 2019

Вы можете использовать scipy.spatial.distance.squareform, чтобы выбрать интересующий вас треугольник:

from scipy.spatial.distance import squareform
squareform(a[::-1], checks=False)
# array([8, 9, 6])
squareform(a[::-1], checks=False).sum()
# 23 
...