numpy изменить форму / перенести 3D в широкий 2D

#numpy

#numpy

Вопрос:

Сделать пример

 letters = np.array([
    np.array([
        np.array(['a','a','a'])
        , np.array(['b','b','b'])
        , np.array(['c','c','c'])
    ])
    , np.array([
        np.array(['d','d','d'])
        , np.array(['e','e','e'])
        , np.array(['f','f','f'])
    ])
    , np.array([
        np.array(['g','g','g'])
        , np.array(['h','h','h'])
        , np.array(['i','i','i'])
    ])
])
 
 array([[['a', 'a', 'a'],
        ['b', 'b', 'b'],
        ['c', 'c', 'c']],

       [['d', 'd', 'd'],
        ['e', 'e', 'e'],
        ['f', 'f', 'f']],

       [['g', 'g', 'g'],
        ['h', 'h', 'h'],
        ['i', 'i', 'i']]], dtype='<U1')
 

Желаемый результат

 array([['a', 'a', 'a',   'd', 'd', 'd',   'g', 'g', 'g'],
       ['b', 'b', 'b',   'e', 'e', 'e',   'h', 'h', 'h'],
       ['c', 'c', 'c',   'f', 'f', 'f',   'i', 'i', 'i']], dtype='<U1')
 
  • Посмотрите, как 2D-массивы теперь расположены бок о бок?
  • Ради экономии памяти я бы предпочел сделать это с transpose помощью and reshape , а не складывать / объединять новый массив.

Попытка

 letters.reshape(
    letters.shape[2],
    letters.shape[0]*letters.shape[1]
)

array([['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c'],
       ['d', 'd', 'd', 'e', 'e', 'e', 'f', 'f', 'f'],
       ['g', 'g', 'g', 'h', 'h', 'h', 'i', 'i', 'i']], dtype='<U1')
 

Я думаю, мне нужно перенести … перед изменением формы?

Комментарии:

1. изменение формы после транспонирования создает копию.

Ответ №1:

 letters.transpose(
    1,0,2
).reshape(
    # where index represents dimension
    letters.shape[2],
    letters.shape[0]*letters.shape[1]
)