Я пытаюсь решить проблему, используя многомерные массивы, вместо того, чтобы прибегать к циклам for
, чтобы получить повышение производительности, но у меня возникают проблемы с индексированием.Треугольное индексирование и выбор оси суммирования для многомерных массивов/матриц
Я пробовал различные перестановки с использованием np.newaxis
, но, похоже, не может выполнять следующие функции.
Проблема:
Часть 1) Возьмут М х N х N массив называется a
, и для каждого из квадратных матриц М, установить верхние треугольную матрицу элементы, как их отрицательных значения.
часть 2) Суммировать все элементы в каждой из матриц M (формы N X N), возвращая 1D массив с M элементами. Назовем этот массив b
.
Покушение Решение
Вот мой МРД/попытка с помощью петли (которая делает работу, но я предпочел бы найти полностью массив/матрица на основе подхода
a = np.array(
[[[ 0, 1],
[ 5, 0]],
[[ 0, 3],
[ 2, 0]]])
Часть 1):
triangular_upper_idx = np.triu_indices_from(a[0])
for i in range(len(a)):
a[i][triangular_upper_idx] *= -1
a
результат:
array([[[ 0, -1],
[ 5, 0]],
[[ 0, -3],
[ 2, 0]]])
Часть 2):
b = np.zeros(len(a))
for i in range(len(a)):
b[i] = np.sum(a[i])
b
результат:
array([ 4., -1.])
Примечание: Я видел подобный вопрос по этой теме (Triangular indices for multidimensional arrays in numpy), но решение было вложено для петель ... Я чувствуете, что numpy может предложить более эффективное, умное решение на базе массива?
Любое руководство будет высоко оценено.
Благодаря
Совершенного спасибо. Я не понял, что np.sum может иметь аргумент массива для своей оси. Это отлично работает. – IanRoberts