изменить форму массива 4D в 2D - PullRequest
0 голосов
/ 27 октября 2018

У меня есть матрица (5,5,5,5), созданная с использованием numpy, которая выглядит следующим образом:

[[[[0.64 0.16 0.   0.   0.  ]
   [0.   0.64 0.16 0.   0.  ]
   [0.   0.   0.64 0.16 0.  ]
   [0.   0.   0.   0.64 0.16]
   [0.   0.   0.   0.   0.8 ]]

  [[0.16 0.04 0.   0.   0.  ]
   [0.   0.16 0.04 0.   0.  ]
   [0.   0.   0.16 0.04 0.  ]
   [0.   0.   0.   0.16 0.04]
   [0.   0.   0.   0.   0.2 ]]

  [[0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]]

  [[0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]]

  [[0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]]]


 [[[0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]]

  [[0.64 0.16 0.   0.   0.  ]
   [0.   0.64 0.16 0.   0.  ]
   [0.   0.   0.64 0.16 0.  ]
   [0.   0.   0.   0.64 0.16]
   [0.   0.   0.   0.   0.8 ]]

  [[0.16 0.04 0.   0.   0.  ]
   [0.   0.16 0.04 0.   0.  ]
   [0.   0.   0.16 0.04 0.  ]
   [0.   0.   0.   0.16 0.04]
   [0.   0.   0.   0.   0.2 ]]

  [[0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]]

  [[0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]]]


 [[[0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]]

  [[0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]]

  [[0.64 0.16 0.   0.   0.  ]
   [0.   0.64 0.16 0.   0.  ]
   [0.   0.   0.64 0.16 0.  ]
   [0.   0.   0.   0.64 0.16]
   [0.   0.   0.   0.   0.8 ]]

  [[0.16 0.04 0.   0.   0.  ]
   [0.   0.16 0.04 0.   0.  ]
   [0.   0.   0.16 0.04 0.  ]
   [0.   0.   0.   0.16 0.04]
   [0.   0.   0.   0.   0.2 ]]

  [[0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]]]


 [[[0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]]

  [[0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]]

  [[0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]]

  [[0.64 0.16 0.   0.   0.  ]
   [0.   0.64 0.16 0.   0.  ]
   [0.   0.   0.64 0.16 0.  ]
   [0.   0.   0.   0.64 0.16]
   [0.   0.   0.   0.   0.8 ]]

  [[0.16 0.04 0.   0.   0.  ]
   [0.   0.16 0.04 0.   0.  ]
   [0.   0.   0.16 0.04 0.  ]
   [0.   0.   0.   0.16 0.04]
   [0.   0.   0.   0.   0.2 ]]]


 [[[0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]]

  [[0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]]

  [[0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]]

  [[0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]
   [0.   0.   0.   0.   0.  ]]

  [[0.8  0.2  0.   0.   0.  ]
   [0.   0.8  0.2  0.   0.  ]
   [0.   0.   0.8  0.2  0.  ]
   [0.   0.   0.   0.8  0.2 ]
   [0.   0.   0.   0.   1.  ]]]]

Как эффективно преобразовать ее в матрицу (25,25), первая строка которойконкатенация первых строк первых пяти (5,5) блоков, а вторая - конкатенация вторых строк первых (5,5) блоков и т. д.?Например, учитывая мою входную матрицу, строка first матрицы вывода должна быть:

[0.64 0.16  0.   0.   0.  0.16  0.04   0.   0.   0.   0.   0.   
0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   
0.  ]

, а строка шестая должна быть комбинацией первойстроки 6–10 блоков 5 на 5, то есть:

[0.   0.   0.   0.   0.  0.64  0.16   0.   0.   0.   0.16   
0.04   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   
0.  0.  ]

Я попытался numpy.reshape (input, (25,25)), но не получил желаемый результат.Любая помощь приветствуется!

1 Ответ

0 голосов
/ 27 октября 2018

Используйте swapaxes (или transpose), чтобы изменить порядок осей перед изменением формы:

In [48]: y = x.swapaxes(1,2).reshape(25,25)

In [49]: y[0]
Out[49]: 
array([0.64, 0.16, 0.  , 0.  , 0.  , 0.16, 0.04, 0.  , 0.  , 0.  , 0.  ,
       0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  ,
       0.  , 0.  , 0.  ])

In [50]: y[5]
Out[50]: 
array([0.  , 0.  , 0.  , 0.  , 0.  , 0.64, 0.16, 0.  , 0.  , 0.  , 0.16,
       0.04, 0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  ,
       0.  , 0.  , 0.  ])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...