numpy remodelagem de matriz multidimensional através de eixo arbitrário

então esta é uma pergunta sobre ouso de remodelagem e como essas funções usam cada eixo em uma escala multidimensional.

Suponha que eu tenha a seguinte matriz que contém matrizes indexadas pelo primeiro índice.O que eu quero alcançar é indexar as colunas de cada matriz com o primeiro índice. Para ilustrar esse problema, considere o exemplo a seguir, onde a matriz numpy fornecida que indexa matrizes com seu primeiro índice é z.

x = np.arange(9).reshape((3, 3))
y = np.arange(9, 18).reshape((3, 3))
z = np.dstack((x, y)).T

Onde z se parece:

array([[[ 0,  3,  6],
    [ 1,  4,  7],
    [ 2,  5,  8]],

   [[ 9, 12, 15],
    [10, 13, 16],
    [11, 14, 17]]])

E sua forma é(2, 3, 3). Aqui, o primeiro índice são as duas imagens e os três x três são uma matriz.

A questão mais especificamente formulada, então, é como usar a remodelagem para obter o seguintesaída desejada:

array([[ 0,  1,  2],
   [ 3,  4,  5],
   [ 6,  7,  8],
   [ 9, 10, 11],
   [12, 13, 14],
   [15, 16, 17]])

Cuja forma é(6, 3). Isso permite que a dimensão da matriz indexe as colunas da matriz x e y, conforme apresentado acima. Meu naturalinclinação era usar remodelar diretamente em z Da seguinte maneira:

out = z.reshape(2 * 3, 3)

Mas sua saída é a seguinte, que indexa as linhas das matrizes e não as colunas:

array([[ 0,  3,  6],
   [ 1,  4,  7],
   [ 2,  5,  8],
   [ 9, 12, 15],
   [10, 13, 16],
   [11, 14, 17]]

A remodelagem pode ser usada para obter a saída desejada acima? Oumais geral, você pode controlar como cada eixo é usado quando você usa a função remodelar?

Duas coisas:

Eu sei como resolver o problema. Eu posso passar por cada elemento da grande matriz (z) transposta e aplicar a remodelagem da maneira acima. Isso aumenta um pouco o tempo de computação e não é realmente problemático. Mas não generaliza e não parece python. Então, eu queria saber se existe uma maneira esclarecida padrão de fazer isso.

Eu não estava claro sobre como formular esta pergunta. Se alguém tiver alguma sugestão de como melhor expressar esse problema, sou todo ouvidos.

questionAnswers(2)

yourAnswerToTheQuestion