многомерный массив numpy, изменяющий форму через произвольную ось
так что это вопрос относительноиспользование изменения формы и как эта функция использует каждую ось в многомерном масштабе.
Предположим, у меня есть следующий массив, который содержит матрицы, проиндексированные по первому индексу.Чего я хочу добиться - это индексировать столбцы каждой матрицы первым индексом., Чтобы проиллюстрировать эту проблему, рассмотрим следующий пример, где данный массив numpy, который индексирует матрицы с его первым индексом, равен z.
x = np.arange(9).reshape((3, 3))
y = np.arange(9, 18).reshape((3, 3))
z = np.dstack((x, y)).T
Где z выглядит так:
array([[[ 0, 3, 6],
[ 1, 4, 7],
[ 2, 5, 8]],
[[ 9, 12, 15],
[10, 13, 16],
[11, 14, 17]]])
И его форма(2, 3, 3)
, Здесь первый индекс - это два изображения, а три x три - это матрица.
Тогда вопрос более конкретно сформулирован так: как использовать изменение формы для получения следующегожелаемый результат:
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17]])
Чья это форма(6, 3)
, Это достигает того, что размерность массива индексирует столбцы матрицы x и y, как представлено выше. Мой натуральныйсклонность была использовать изменение формы непосредственно на Z следующим образом:
out = z.reshape(2 * 3, 3)
Но его выходные данные следующие, которые индексируют строки матриц, а не столбцы:
array([[ 0, 3, 6],
[ 1, 4, 7],
[ 2, 5, 8],
[ 9, 12, 15],
[10, 13, 16],
[11, 14, 17]]
Можно ли изменить форму, чтобы получить желаемый результат выше? Или жев более общем смысле, можете ли вы контролировать использование каждой оси при использовании функции изменения формы?
Две вещи:
Я знаю, как решить проблему. Я могу пройти каждый элемент большой матрицы (z) транспонированной и затем применить изменение формы, как описано выше. Это немного увеличивает время вычислений и не является проблематичным. Но он не обобщает и не чувствует питона. Поэтому мне было интересно, есть ли стандартный просветленный способ сделать это.
Мне не было ясно, как сформулировать этот вопрос. Если у кого-то есть предложения о том, как лучше сформулировать эту проблему, я весь в ушах.