将numpy数据类型转换为原生python数据类型的更简单方法



我有一个具有不同数据类型的元素列表。我需要将所有的numpy.int64 numpy.float64转换为intfloat

有没有比这更简单/更紧凑的方法:

import numpy as np
import datetime
a = [np.float64(1.2), np.int64(123), 'blablabla', datetime.datetime.now()]
#[1.2, 123, 'blablabla', datetime.datetime(2020, 10, 24, 19, 16, 2, 37112)]
a = [float(v) if isinstance(v,np.float64) else v for v in a]
a = [int(v) if isinstance(v,np.int64) else v for v in a]

NumPy.item((而不是NumPy元素,它将给出近似的python本地类型

a =[val.item() if type(val).__module__ == np.__name__ else val for val in a ]
for val in native:
    print(type(val))
 numpyNum = np.float(1.2)
 pythonNum = num.item()
pythonNativeTypeValues = [ v.item() for v in a]

当你的列表中有多个类型时,你需要检查元素类型是否为NumPy,因此代码将如下所示

import numpy as np 
import datetime
a = [np.float64(1.2), np.int64(123), 'blablabla', datetime.datetime.now()]
native = []

for val in a:
    if type(val).__module__ == np.__name__:
        val =val.item()
    native.append(val)

for val in native:
    print(type(val))
#<class 'float'>
#<class 'int'>
#<class 'str'>
#<class 'datetime.datetime'>

如果你计划使用列表压缩,代码将是一行,那就是

native =[val.item() if type(val).__module__ == np.__name__ else val for val in a ]

最新更新