многомерный массив 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) транспонированной и затем применить изменение формы, как описано выше. Это немного увеличивает время вычислений и не является проблематичным. Но он не обобщает и не чувствует питона. Поэтому мне было интересно, есть ли стандартный просветленный способ сделать это.

Мне не было ясно, как сформулировать этот вопрос. Если у кого-то есть предложения о том, как лучше сформулировать эту проблему, я весь в ушах.

Ответы на вопрос(2)

Ваш ответ на вопрос