Упорядочивание и изменение формы массива 3D

У меня есть 3D-массив, который мне нужно изменить и упорядочить. Например, у меня естьx=np.array([np.array([np.array([1,0,1]),np.array([1,1,1]),np.array([0,1,0]),np.array([1,1,0])]),np.array([np.array([0,0,1]),np.array([0,0,0]),np.array([0,1,1]),np.array([1,0,0])]),np.array([np.array([1,0,0]),np.array([1,0,1]),np.array([1,1,1]),np.array([0,0,0])])])

Какой формы (3,4,3), при печати я получаю:

array([[[1, 0, 1],
        [1, 1, 1],
        [0, 1, 0],
        [1, 1, 0]],

       [[0, 0, 1],
        [0, 0, 0],
        [0, 1, 1],
        [1, 0, 0]],

       [[1, 0, 0],
        [1, 0, 1],
        [1, 1, 1],
        [0, 0, 0]]])

Теперь мне нужно изменить этот массив в(4,3,3) выбрав один и тот же индекс в каждом подмассиве и собрав их вместе, получим что-то вроде этого:

array([[[1,0,1],[0,0,1],[1,0,0]],
[[1,1,1],[0,0,0],[1,0,1]],
[[0,1,0],[0,1,1],[1,1,1]],
[[1,1,0],[1,0,0],[0,0,0]]]

Я старалсяreshape, все виды укладки и ничего не работает (организовал массив, как мне нужно). Я знаю, что могу сделать это вручную, но для больших массивов вручную это не вариант.

Любая помощь будет высоко ценится. Спасибо

 hpaulj28 июн. 2016 г., 06:01
Вы можете упростить создание массива до:x= np.array([[[1,0,1], [1,1,1],...,1,1], [0,0,0]]])

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

Решение Вопроса

swapaxes будет делать то, что вы хотите. То есть, если ваш входной массивx и ваш желаемый результатy, затем

np.all(y==np.swapaxes(x, 1, 0))

должен датьTrue.

 Mad Physicist28 июн. 2016 г., 06:02
Также возможноrollaxis, В этом случае оба, вероятно, будут эквивалентны, но для массивов с большими размерами,rollaxis часто тот, который вам нужен, так как он лучше сохраняет порядок остальных осей.

Для массивов более высокой размерности transpose примет кортеж из номеров осей, чтобы переставить оси:

import numpy as np
foo = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]], [[9, 10], [11, 12]]])
foo.transpose(1, 0, 2)

результат:

array([[[ 1,  2],
        [ 5,  6],
        [ 9, 10]],

       [[ 3,  4],
        [ 7,  8],
        [11, 12]]])

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