2024-04-24 00:06:25 发布
网友
我想创建一个空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,所以打印显示不是很有趣
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语法用于访问对象属性。你知道吗
.foo
================
使用这种访问创建结构的一种完全不同的方法是使用recarray——这是一个numpy数组子类,允许您使用属性名称访问数据类型字段
recarray
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')])
在这里,我将字段定义为taking object dtype,它允许我分配任何内容,包括为每个属性分配其他数组。但通常情况下,数据类型是更具体的,比如int、float、string。你知道吗
我可以查看数组中所有项的foo属性/字段R:
foo
R
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语法访问字段。你知道吗
attribute
如果我定义一个简单的类,比如:
我可以用以下几个对象创建字典:
然后为每个对象指定属性
因为我没有定义
repr
或str
,所以打印显示不是很有趣我也可以用这些东西列个清单
因此列表和字典都可以被索引(数组也可以);但是
.foo
语法用于访问对象属性。你知道吗================
使用这种访问创建结构的一种完全不同的方法是使用
recarray
——这是一个numpy数组子类,允许您使用属性名称访问数据类型字段在这里,我将字段定义为taking object dtype,它允许我分配任何内容,包括为每个属性分配其他数组。但通常情况下,数据类型是更具体的,比如int、float、string。你知道吗
我可以查看数组中所有项的
foo
属性/字段R
:recarray
有一个特殊的方法,允许通过attribute
语法访问字段。你知道吗相关问题 更多 >
编程相关推荐