我想使用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')])

10-04 22:22
查看更多