Принято, ответ выше велик.Но я добавлю следующее, потому что я математик-придурок, и хорошо использовать тот факт, что a.shape
равно a.T.shape[::-1]
... т. Е. Взятие транспонирования меняет порядок индексов массива.Итак, если у вас есть строительные блоки в массиве, называемом блоками, то решение выше:
new = np.concatenate([block[..., np.newaxis] for block in blocks],
axis=len(blocks[0].shape))
, но вы также можете сделать
new2 = np.array([block.T for block in blocks]).T
, который, я думаю, читается более чисто.Стоит отметить, что уже принятый ответ работает быстрее:
%%timeit
new = np.concatenate([block[..., np.newaxis] for block in blocks],
axis=len(blocks[0].shape))
1000 loops, best of 3: 321 µs per loop
, а
%%timeit
new2 = np.array([block.T for block in blocks]).T
1000 loops, best of 3: 407 µs per loop