是否有可能创建一个行为非常像 collections.namedtuple 的 NumPy 对象,在某种意义上可以像这样访问元素:
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)])
这将创建一个具有一种 namedtuple 类型的 0 维值;它几乎可以工作:
>>> 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 对象获得上述所需的行为(通过字符串和索引进行项目分配)?
最佳答案
您可以使用 numpy.rec
模块执行类似的操作。您需要的是此模块中的 record
类,但我不知道如何直接创建此类的实例。一种间接的方法是首先创建一个包含单个条目的 recarray
:
>>> a = numpy.recarray(1, names=["start date", "n"], formats=["S11", "i4"])[0]
>>> a[0] = "2011-09-20"
>>> a[1] = 42
>>> a
('2011-09-20', 42)
>>> a["start date"]
'2011-09-20'
>>> a.n
42
如果您知道如何直接创建 record
的实例,请告诉我。
关于python - 等价于 NumPy 中的命名元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7489956/