如果我有一个numpy dtype,如何自动将其转换为最接近的python数据类型?例如,
numpy.float32 -> "python float"
numpy.float64 -> "python float"
numpy.uint32 -> "python int"
numpy.int16 -> "python int"
我可以尝试提出所有这些情况的映射,但是numpy是否提供了一些自动方式将其dtypes转换为最接近的可能的本机python类型?这种映射不一定是详尽无遗的,但它应该转换具有close python模拟的常见dtypes . 我认为这已经发生在numpy的某个地方了 .
8 回答
发现自己有混合的numpy类型和标准python . 因为所有numpy类型派生自
numpy.generic
,以下是如何将所有内容转换为python标准类型:怎么样:
如果要将(numpy.array或numpy标量或本机类型OR numpy.darray)转换为本机类型,您只需执行以下操作:
tolist会将您的标量或数组转换为python本机类型 . 默认的lambda函数负责处理值已经是本机的情况 .
您还可以调用要转换的对象的item() method:
使用a.item()或np.asscalar(a)将大多数NumPy值转换为本机Python类型:
阅读更多in the NumPy manual . 为了好奇,为您的系统构建一个转换表:
有些NumPy类型在某些系统上没有本机Python等效类型,包括:
clongdouble
,774793,complex192
,complex256
,float128
,longcomplex
,longdouble
和longfloat
. 在使用asscalar
之前,需要将它们转换为最接近的NumPy等效值 .我想你可以像这样编写通用类型转换函数:
这意味着没有固定列表,您的代码将扩展为更多类型 .
numpy将映射中的信息显示为
typeDict
,因此您可以执行以下操作::如果你想要实际的python类型而不是它们的名字,你可以做::
tolist()
是实现这一目标的更通用的方法 . 它适用于任何原始dtype以及数组或矩阵 .如果从原始类型调用,我实际上不会产生一个列表:
numpy == 1.15.2