2017-03-10 55 views
0

我想知道如何使用三個1D數組創建一個簡單的數據立方體(矩陣),或者如果有更簡單的方法。我希望能夠從多維數據集的最後調用一個特定的值,例如cube [0,2,6]。如何在python中創建3D數組(數據立方體)?

x = arange(10) 
y = arange(10,20,1) 
z = arange(20,30,1) 

cube = meshgrid(x,y,z) 

但是,這並沒有給所期望的結果,因爲它提供了多張陣列,不能輕易撥打特定號碼。我希望能夠用它來處理大量的數據集,這些數據集將在以後用手工完成。謝謝

+0

我寧願希望能夠把我自己的號碼所以想看看不像一個序列 –

+0

然後就往裏面... A = np.arange(27 ).reshape(3,3,3)...或其他... a.fill(0) – NaN

回答

1

meshgrid顧名思義創建一個正交網格。如果你用3個參數調用它,它將是一個3d網格。現在網格是三維點排列,但每個點有三個座標。因此meshgrid爲每個座標返回3個數組。

從中獲得一個3d數組的標準方法是應用具有三個參數的矢量化函數。下面是一個簡單的例子:

>>> x = arange(7) 
>>> y = arange(0,30,10) 
>>> z = arange(0,200,100) 
>>> ym, zm, xm = meshgrid(y, z, x) 
>>> xm 
array([[[0, 1, 2, 3, 4, 5, 6], 
     [0, 1, 2, 3, 4, 5, 6], 
     [0, 1, 2, 3, 4, 5, 6]], 

     [[0, 1, 2, 3, 4, 5, 6], 
     [0, 1, 2, 3, 4, 5, 6], 
     [0, 1, 2, 3, 4, 5, 6]]]) 
>>> ym 
array([[[ 0, 0, 0, 0, 0, 0, 0], 
     [10, 10, 10, 10, 10, 10, 10], 
     [20, 20, 20, 20, 20, 20, 20]], 

     [[ 0, 0, 0, 0, 0, 0, 0], 
     [10, 10, 10, 10, 10, 10, 10], 
     [20, 20, 20, 20, 20, 20, 20]]]) 
>>> zm 
array([[[ 0, 0, 0, 0, 0, 0, 0], 
     [ 0, 0, 0, 0, 0, 0, 0], 
     [ 0, 0, 0, 0, 0, 0, 0]], 

     [[100, 100, 100, 100, 100, 100, 100], 
     [100, 100, 100, 100, 100, 100, 100], 
     [100, 100, 100, 100, 100, 100, 100]]]) 
>>> cube = xm + ym + zm 
>>> cube 
array([[[ 0, 1, 2, 3, 4, 5, 6], 
     [ 10, 11, 12, 13, 14, 15, 16], 
     [ 20, 21, 22, 23, 24, 25, 26]], 

     [[100, 101, 102, 103, 104, 105, 106], 
     [110, 111, 112, 113, 114, 115, 116], 
     [120, 121, 122, 123, 124, 125, 126]]]) 
>>> cube[0, 2, 6] 
26