将numpy数组类型和值从Float64转换为Float32



我正在尝试将类型为Float64的阈值数组(scikit-learn中隔离林的pickle文件(转换为Float32

for i in range(len(tree.tree_.threshold)):
tree.tree_.threshold[i] = tree.tree_.threshold[i].astype(np.float32)

​然后打印

for value in tree.tree_.threshold[:5]:
print(type(value))
print(value)

我得到的输出是:

<class 'numpy.float64'>
526226.0
<class 'numpy.float64'>
91.9514312744
<class 'numpy.float64'>
3.60330319405
<class 'numpy.float64'>
-2.0
<class 'numpy.float64'>
-2.0

我没有得到Float32的正确转换。我想将值和它们的类型转换为Float32,有人有解决方法吗?

问题是没有对numpy数组进行任何类型转换。计算一个float32变量,并将其作为float64 numpy数组的一个条目。numpy然后将其正确地转换回float64

试试这样的东西:

a = np.zeros(4,dtype="float64") 
print a.dtype
print type(a[0])
a = np.float32(a)
print a.dtype
print type(a[0])

输出(用python 2.7测试(

float64
<type 'numpy.float64'>
float32
<type 'numpy.float32'>

在您的情况下,a是数组树.tree_.threshold

你可以试试这个:

tree.tree_.threshold[i]=tree.tree_.threshold[i].astype('float32',casting='same_kind’)

实际上我很努力,但没能做到"sklearn.tree._tree.tree"对象不可写。

它在生成PMML文件时会导致精度问题,因此我在那里提出了一个错误,他们通过提供了更新的解决方案而不是在内部将其转换为Float64。

有关更多信息,您可以关注此链接:精度问题

最新更新