2012-03-28 2 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

Вы должны дать второй элемент вашего 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')])]) 

Прости меня за editorializing, но я считаю, 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 ', 10.), (' ARG ', 12.)))], dtype = [(' год ',' hotshotiguana

+1

Я, скорее всего, сглажу объект по линии, потому что легче получить данные из базы данных, но это вопрос, который приносит много работы, когда я работаю с Numpy, поэтому я решил спросить об этом. – hotshotiguana

Смежные вопросы