2013-04-05 156 views
3

首先我會道歉這個問題的任意性,但我重寫了一些我的腳本使用Numpy數組而不是嵌套的Python列表(對於性能和內存),但我仍然努力與他們的聲明。我試圖創建一個使用numpy數組的結構,我從數組中的1000(任意值)元素開始,其中每個元素都應該包含一個float(as [x] [0])和一個嵌套數組,其中包含一個嵌套數組,其中包含一個嵌套數組,其中包含一個嵌套數組,其中包含一個嵌套數組,座標(因此10.0000 x 2浮動PER頂層元素)(as [x] [1],嵌套數組中的每個元素都可以[x] [1] [y] [z]訪問,其中y是嵌套數組中的元素z指定2個座標中的哪一個)。以下問題Nested Structured Numpy Array創建了幾乎相同的結構(作爲我的問題和我期望的結構的參考)。Numpy陣列創建

原理圖的原始數據例如:

time 0 
    m/z 10 int 10 
    m/z 20 int 20 
    m/z 30 int 1000 
    ... 
time 1 
    <repeat> 

我已閱讀,我haveto使用D型部分來定義嵌套的數組,但我不是在尺寸空數組的聲明部分十分清楚,可能有誰給我一隻手?這是我到目前爲止所提出的。

data=np.zeroes((1000,2 /* Now add nested array */), dtype=[('time', 'f'), [('m/z','f'), ('intensity','f')]])

PS:矩陣可能是這更好的選擇嗎?

+0

'y'在[x] [1] [y] [z]中的含義是什麼? – 2013-04-05 09:07:14

+0

嵌套數組的元素。我在OP中犯了一個錯字(x應該讀爲y,讓我解決這個問題)。 – 2013-04-05 09:10:08

+0

您可以嘗試使用[pandas dataframe](http://pandas.pydata.org/)。 – MaxPowers 2013-04-05 09:27:09

回答

6
>>> a = np.zeros(1000, dtype='float32, (10000,2)float32') 
>>> a[200][0] 
0.0 
>>> a[200][1][2000] 
array([ 0., 0.], dtype=float32) 

請注意,這會創建1000個維數組(10000,2)。這很好,如果你只做過只看其中一個數組的操作。使用單獨的(1000,10000,2)數組可以更好地利用NumPy中的矢量化操作。例如,你可以增加所有第二座標在一個操作是這樣的:

>>> b = np.zeros((1000,10000,2)) 
>>> b[:,:,1] += 1 

試圖做同樣的a[:][1][:,1]是錯誤的。

+0

賓果,謝謝;) – 2013-04-05 09:32:36

+0

@BasJansen你也可以考慮兩個單獨的數組,一個用於1000個浮點數,另一個用於形狀(1000,10000,2)。 – 2013-04-05 09:34:44