Эквивалент именованного кортежа в NumPy?

Можно ли создать объект NumPy, который ведет себя очень похоже на collection. namedtuple в том смысле, что к элементам можно получить доступ следующим образом:

data[1] = 42
data['start date'] = '2011-09-20'  # Slight generalization of what is possible with a namedtuple

Я попытался использовать сложный тип данных:

>>> data = numpy.empty(shape=tuple(), dtype=[('start date', 'S11'), ('n', int)])

Это создает 0-мерное значение с своего рода типом namedtuple; это почти работает:

>>> data['start date'] = '2011-09-20'
>>> data
array(('2011-09-20', -3241474627884561860), 
      dtype=[('start date', '|S11'), ('n', '<i8')])

Однако доступ к элементам не работает, потому что «массив» является 0-мерным:

>>> data[0] = '2011-09-20'
Traceback (most recent call last):
  File "<ipython-input-19-ed41131430b9>", line 1, in <module>
    data[0] = '2011-09-20'
IndexError: 0-d arrays can't be indexed.

Есть ли способ получить желаемое поведение, описанное выше (назначение элемента через строку и индекс) с объектом NumPy?

10
задан Eric O Lebigot 20 September 2011 в 19:31
поделиться