Вложенный структурированный массив Numpy - PullRequest
3 голосов
/ 28 марта 2012

Я пытаюсь создать структурированный массив в следующем формате:

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 Ответ

2 голосов
/ 28 марта 2012

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

Простите за редактирование, но я нахожу ре-массивы достаточно сложными для работы без вложенности, вы потеряетемного, если вы только что сгладили dtype?

update:

У вас есть еще один уровень вложенности, чем я предполагал.Попробуйте это:

>>> 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')])])])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...