嵌套结构化Numpy数组

时间:2012-03-28 14:15:57

标签: 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 个答案:

答案 0 :(得分:2)

您需要为dtype的第二个元素命名,请尝试:

>>> 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-arrays很难在没有嵌套的情况下工作,如果你只是扁平化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')])])])