2017-01-27 3 views
1

Скажем, у меня есть 3-D массив:Как изменить размер массива на подмассиву элегантно в numpy?

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

[[3,4,5], 
    [3,4,5], 
    [3,4,5]]] 

И я хочу, чтобы изменить это столбцами:

[[0,1,2,3,4,5], 
[0,1,2,3,4,5], 
[0,1,2,3,4,5]] 

Что бы элегантную код питона Numpy для этого по существу 3-D np.array произвольной формы и глубины? Может ли быть быстрый метод, который обходит петлю? Все подходы, которые я сделал, были ужасно суровыми и грубыми, они были в основном слишком медленными и бесполезными ...

Спасибо!

+0

Я думаю, можно сказать, что я пытаюсь распутать этот 3D массив, индекс столбца ... – Jay

ответ

2

оси обмена и изменения формы -

a.swapaxes(0,1).reshape(a.shape[1],-1) 

Пример запуска -

In [115]: a 
Out[115]: 
array([[[0, 1, 2], 
     [0, 1, 2], 
     [0, 1, 2]], 

     [[3, 4, 5], 
     [3, 4, 5], 
     [3, 4, 5]]]) 

In [116]: a.swapaxes(0,1).reshape(a.shape[1],-1) 
Out[116]: 
array([[0, 1, 2, 3, 4, 5], 
     [0, 1, 2, 3, 4, 5], 
     [0, 1, 2, 3, 4, 5]]) 
+0

Это гений , Спасибо! – Jay