[英]Dictionary of numpy array in python
我想创建一个空的numpy数组的数据结构。
d[1].foo = numpy.arange(x)
d[1].bar = numpy.arange(x)
d[2].foo = numpy.arange(x)
d[2].bar = numpy.arange(x)
最好的选择是什么?包含numpy数组的字典列表?
如果我定义一个简单的类,例如:
class MyObj(object):
pass
.
我可以使用以下几个对象创建字典:
In [819]: d={1:MyObj(), 2:MyObj()}
然后为每个对象分配属性
In [820]: d[1].foo=np.arange(3)
In [821]: d[1].bar=np.arange(3)
In [822]: d[2].foo=np.arange(3)
In [823]: d[2].bar=np.arange(3)
In [824]: d
Out[824]: {1: <__main__.MyObj at 0xaf20cfac>, 2: <__main__.MyObj at 0xaf20c4cc>}
由于我没有定义repr
或str
因此打印显示不是很有趣。
In [825]: vars(d[2])
Out[825]: {'bar': array([0, 1, 2]), 'foo': array([0, 1, 2])}
我也可以列出这些对象
In [826]: dl = [None, d[1], d[2]]
In [827]: dl
Out[827]: [None, <__main__.MyObj at 0xaf20cfac>, <__main__.MyObj at 0xaf20c4cc>]
In [828]: vars(dl[1])
Out[828]: {'bar': array([0, 1, 2]), 'foo': array([0, 1, 2])}
这样列表和字典都可以被索引(数组也可以被索引); 但是.foo
语法用于访问对象属性。
===============
使用这种访问创建结构的一种完全不同的方法是使用recarray
这是一个numpy数组子类,允许您访问带有属性名称的dtype字段
In [829]: R=np.recarray((3,), dtype=[('foo','O'),('bar','O')])
In [830]: R
Out[830]:
rec.array([(None, None), (None, None), (None, None)],
dtype=[('foo', 'O'), ('bar', 'O')])
In [831]: R[1].foo=np.arange(3)
In [832]: R[2].bar=np.arange(4)
In [833]: R
Out[833]:
rec.array([(None, None), (array([0, 1, 2]), None), (None, array([0, 1, 2, 3]))],
dtype=[('foo', 'O'), ('bar', 'O')])
在这里,我将字段定义为采用对象dtype,这使我可以分配任何内容,包括向每个属性分配其他数组。 但通常dtype是更具体的东西,例如int,float,string。
我可以查看数组R
所有项目的foo
属性/字段:
In [834]: R.foo
Out[834]: array([None, array([0, 1, 2]), None], dtype=object)
In [835]: R['bar']
Out[835]: array([None, None, array([0, 1, 2, 3])], dtype=object)
recarray
具有一种特殊的方法,该方法允许通过attribute
语法访问字段。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.