我想使用numpy.dtype()对象构造一个具有各种不同数据类型的numpy数组。
我有一个字典“ mydict”,其中存储了有关数据的所有信息,我想用它创建一个数据类型对象dt
。 “ mydict”是动态创建的,具体取决于我选择的属性,并且数据类型也对应于该属性!
import numpy as np
mydict={'name0': 'mass', 'name1': 'position', 'name2': 'ID',
'format0': np.float32, 'format1': np.int8, 'format2': np.uint64}
数据类型对象
dt
应该看起来像这样dt = np.dtype([('mass', np.float32), ('position', np.int8), ('ID', np.uint64)])
我的问题是如何创建
dt
而不将其手动构造/写入代码?主要的问题是我不知道如何在
np.dtype()
后面附加另一个“名称”和“格式”组合条目,或者是否可能...我正在使用
dt
然后将我的数据读取到这样的numpy数组中!data_array=np.array((nr_rows, nr_cols)), dtype=dt)
我尝试了一些Dict理解,列表和字典的尝试,但是找不到正确的方法。
最佳答案
In [209]: dd={'name0': 'mass', 'name1': 'position', 'name2': 'ID',
...: 'format0': np.float32, 'format1': np.int8, 'format2': np.uint64}
In [213]: [(dd['name%s'%i],dd['format%s'%i]) for i in range(3)]
Out[213]: [('mass', numpy.float32), ('position', numpy.int8), ('ID', numpy.uint64)]
In [214]: dt=np.dtype([(dd['name%s'%i],dd['format%s'%i]) for i in range(3)])
In [216]: arr = np.zeros((2,), dt)
In [217]: arr
Out[217]:
array([( 0., 0, 0), ( 0., 0, 0)],
dtype=[('mass', '<f4'), ('position', 'i1'), ('ID', '<u8')])