2014-10-02 111 views
4

提供一維數組作爲a的3D平鋪:一個numpy的陣列

a=np.arange(8) 

我想它在3D方案,以便具有這樣的形狀(n1, len(a), n3)被再現。 有沒有任何工作方式可以通過np.tile獲取?這似乎微不足道,但嘗試:

np.shape( np.tile(a, (n1,1,n3)) ) 

np.shape( np.tile(np.tile(a, (n1,1)), (1,1,n2)) ) 

我從來沒有獲得我所需要的,是所產生的形狀(n1, 1, len(a)*n3)(1, n1, len(a)*n3)。 也許是我不理解tile作品...

回答

7

發生了什麼事怎麼是a正在取得一個1x1x8陣列應用於平鋪之前。您需要將a設爲1x8x1陣列,然後致電tile

作爲the documentation for tile筆記:

如果A.ndim < dA被促進爲d維通過預先 新的軸。因此,將形狀(3,)陣列提升爲(1,3)以進行2-D 複製或用於3-D複製的形狀(1,1,3)。如果這不是 所需的行爲,請在 調用此函數之前手動將A升級爲d維。

讓你後的結果最簡單的方法是切片aNone(或相當於np.newaxis),使其正確的形狀。

作爲一個簡單的例子:

import numpy as np 

a = np.arange(8) 
result = np.tile(a[None, :, None], (4, 1, 5)) 
print result.shape