如何从字符串'long'创建一个numpy dtype?

时间:2012-08-31 14:26:00

标签: python types numpy

我有一个包含字符串'long'的变量。如何创建一个numpy dtype对象,其中某个类型等效于此字符串中的long?我有一个包含许多数字和相应类型的文件。 intfloat等没有问题,只有long不起作用。我不想在我的代码中对某些替换long -> int32进行硬编码。

>>> np.dtype('long')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: data type not understood

另外:有没有办法从纯python中的字符串创建变量类型?我的意思是,我想要int.__name__的逆,它将类型名称转换为字符串。

2 个答案:

答案 0 :(得分:3)

在这种特殊情况下,我认为您可以使用getattrnumpy模块本身获取它:

>>> import numpy as np
>>> np.dtype('long')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: data type not understood

但:

>>> getattr(np, 'long')
<type 'long'>
>>> np.dtype(getattr(np, 'long'))
dtype('int64')
>>> np.dtype(getattr(np, 'int'))
dtype('int32')
>>> np.dtype(getattr(np, 'float64'))
dtype('float64')
>>> np.dtype(getattr(np, 'float'))
dtype('float64')

答案 1 :(得分:0)

np.dtype(eval('long'))
如果您准备将eval纳入您的代码,

可以满足您的需求。