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

时间:2017-08-30 08:09:47

标签: python numpy scikit-learn pickle

我正在尝试将类型从Float64转换为Float32的阈值数组(隔离森林的pickle文件从scikit学习)

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,有没有人有解决方法?

3 个答案:

答案 0 :(得分:11)

问题是您没有对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.tree_.threshold

答案 1 :(得分:1)

  

其实我努力但却无法做到   &#39; sklearn.tree._tree.Tree&#39;对象不可写。

     

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

有关详情,请点击以下链接: Precision Issue

答案 2 :(得分:0)

你可以试试这个:

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