2012-03-28 64 views
2

我試圖創建以下格式的結構數組:結構巢狀陣列numpy的

import numpy as np 
x = np.array([(2009, (('USA', 10.), ('CHN', 12.))), (2010, (('BRA', 10.), 
    ('ARG', 12.)))], dtype=[('year', '<i4'), [('iso','a3'), ('value','<f4')]]) 

,但它不斷告訴我輸入一個有效的數據類型,我不知道如何着手。我能做到這一點就好了,如果嵌套數組是相同的格式,即所有的整數:

np.array([('ABC', ((1, 2, 3), (1, 2, 3))), ('CBA', ((3, 2, 1), (3, 2, 1)))], 
    dtype='a3, (2, 3)i') 

任何幫助或建議,將不勝感激。

回答

1

你需要給你的D類名稱的第二個元素,嘗試:

>>> dtype=[('year', '<i4'), ('item_name', [('iso','a3'), ('value','<f4')])] 
>>> np.zeros(3, dtype=dtype) 
array([(0, ('', 0.0)), (0, ('', 0.0)), (0, ('', 0.0))], 
     dtype=[('year', '<i4'), ('item_name', [('iso', '|S3'), ('value', '<f4')])]) 

原諒我的社論,但我發現REC陣列夠硬一起工作不築巢,你就輸定了一個很多,如果你只是扁平化dtype?

更新:

你有嵌套一個多水平比我意識到。試試這個:

>>> dtype=[('year', '<i4'), ('countries', [('c1', [('iso','a3'), ('value','<f4')]), ('c2', [('iso','a3'), ('value','<f4')])])] 
>>> np.array([(2009, (('USA', 10.), ('CHN', 12.))), (2010, (('BRA', 10.), ('ARG', 12.)))], dtype) 
array([(2009, (('USA', 10.0), ('CHN', 12.0))), 
    (2010, (('BRA', 10.0), ('ARG', 12.0)))], 
    dtype=[('year', '<i4'), ('countries', [('c1', [('iso', '|S3'), ('value', '<f4')]), ('c2', [('iso', '|S3'), ('value', '<f4')])])]) 
+0

仍然沒有運氣:'np.array([(2009年,(( 'USA',10),( 'CHN',12))),(2010年,(('BRA '),('ARG',12.)))],dtype = [('year',' hotshotiguana 2012-03-28 15:21:59

+1

我很可能會將對象扁平化,因爲從數據庫中獲取數據更容易,但是這是一個與Numpy工作時相當的問題,所以我想我會問這個問題。 – hotshotiguana 2012-03-28 15:27:19