Селективный захват рядов матрицы Numpy
Есть ли способ индексировать трехмерную матрицу, чтобы выборочно захватить i-ую строку каждого слоя?
Например, у меня есть матрица RxNxR, и я хочу взять 1-ую строку 1-го уровня, 2-ю строку 2-го уровня, 3-й ряд 3-го уровня и т. д. и получить матрицу RxN.
Могу ли я сделать это за одну операцию?
3 ответа
Решение
Используя функцию numpy.diagonal:
a = np.arange(27).reshape(3, 3, 3)
np.diagonal(a, offset=0, axis1=0, axis2=1).T
дает
array([[ 0, 1, 2],
[12, 13, 14],
[24, 25, 26]])
Я считаю, что это должно сработать
import numpy as np
matrix = ...
result = np.zeros((matrix.shape[0], matrix.shape[1]))
for i in range(0, len(matrix)):
result[i] = matrix[i][i]
Я думаю, что вы могли бы использовать понимание - зависит от того, какие измерения вы определяете как "слой" и т. Д., Но это будет работать:
a = np.array([...])
[a[:, i, 0] for i in range(np.shape(a)[1])]