2014-09-03 64 views
0

我有一個numpy數組,rank = 4。假設它看起來像這樣:Numpy多維數組和反向訪問

np.shape(my_array) 
(10,5,25,50) 

我也有10個值的列表,如

x = np.arange(10) 

我希望能夠繪製x反對my_array第一軸的每一個值,也就是說,我想這樣做:

for axis2_index in xrange(5): 
    for axis3_index in xrange(25): 
     for axis4_index in xrange(50): 
      plt.plot(x,my_array[:,axis2_index,axis3_index,axis4_index]) 

但當然,我想要做的是,在一個numpy的形式,沒有for循環。我一直在爲此苦苦掙扎,但仍然找不到任何簡單的方法來做到這一點。換句話說,我希望能夠訪問my_array,例如,我可以得到一個5×25×50的10個矢量陣列,這些矢量對應於第一個軸my_array。我也嘗試過np.reshape,但它改變了元素的順序,使我無法使用它。

+0

這不是一個很大數量的行嗎?在這種情況下,您不必擔心for循環的速度,而是渲染速度。但是,我建議你查看'np.broadcast_arrays'。 – mdurant 2014-09-03 18:56:17

+0

謝謝@mdurant。這只是一個例子,我實際上想要做一些計算和訪問所有這些數字:它們是在3個不同參數的網格上計算函數的結果,額外的維度是函數的輸出,本身就是一個數組(一個譜)。我已經檢查過'np.broadcast_arrays',但仍然無法看到我可以如何使用..任何帶有類似情況的教程,我都可以看看?對於我來說,如何做到這一點,numpy doc是不夠的。 – 2014-09-03 19:34:05

回答

0

下面是使用廣播一個簡單的例子:

y = randn(10,4) 
x = arange(10) 

plot(x[:,None],y) 

我在你的情況下猜你會x[:,None,None,None]

+0

這是我最初的嘗試,當你提到廣播時,但出現以下錯誤:'ValueError:x和y不能大於2-D'。 – 2014-09-03 19:52:47

+0

對不起,你是對的 - 我會盡快給你回覆。您必須重塑爲2d:第一個維度是獨立軸,其餘維度是所有其他參數。 – mdurant 2014-09-03 20:13:32

+0

我設法通過一個複雜的命令來實現它:'my_array.transpose()。reshape(5 * 25 * 50,10)',然後簡單地將每個元素與'x'對應。但是,這損失了每個模型的座標(param1,param2和param3)值的信息,我認爲這並不是很有用...... – 2014-09-04 00:22:22