Convert numpy array type and values from Float64 t

2020-06-30 05:34发布

I am trying to convert threshold array(pickle file of isolation forest from scikit learn) of type from Float64 to Float32

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

​ Then Printing it

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

the output i am getting is :

<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

I am not getting a proper conversion to Float32. I want to convert values and their type to Float32, Did anybody have any workaround this ?

3条回答
迷人小祖宗
2楼-- · 2020-06-30 05:52

The problem is that you do not do any type conversion of the numpy array. You calculate a float32 variable and put it as an entry into a float64 numpy array. numpy then converts it properly back to float64

Try someting like this:

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

The output (tested with python 2.7)

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

a is in your case the array tree.tree_.threshold

查看更多
Rolldiameter
3楼-- · 2020-06-30 05:52

Actually i tried hard but not able to do as the 'sklearn.tree._tree.Tree' objects is not writable.

It is causing a precision issue while generating a PMML file, so i raised a bug over there and they gave an updated solution for it by not converting it in to the Float64 internally.

For more info, you can follow this link: Precision Issue

查看更多
Deceive 欺骗
4楼-- · 2020-06-30 06:08

You can try this:

tree.tree_.threshold[i]=tree.tree_.threshold[i].astype('float32',casting='same_kind’)
查看更多
登录 后发表回答