web-dev-qa-db-fra.com

Conversion du type de tableau numpy et des valeurs de Float64 en Float32

J'essaie de convertir un tableau de seuil (fichier de pickle de la forêt d'isolation de scikit learn) de type de Float64 à Float32 

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

Puis l’imprimer

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

le résultat que je reçois est:

<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

Je n'obtiens pas une conversion appropriée en Float32. Je veux convertir les valeurs et leur type en Float32. Quelqu'un a-t-il déjà résolu ce problème?

9
Akshay Tilekar

En fait, j’ai essayé très fort mais je n’étais pas capable de faire comme Les objets 'sklearn.tree._tree.Tree' ne sont pas accessibles en écriture.

Cela provoque un problème de précision lors de la génération d'un fichier PMML, donc i soulevé un bogue là-bas et ils ont donné une solution mise à jour pour cela par ne pas le convertir en interne dans le Float64.

Pour plus d’informations, vous pouvez suivre ce lien: Precision Issue

1
Akshay Tilekar

Le problème est que vous ne faites aucune conversion de type du tableau numpy. Vous calculez une variable float32 et la placez comme entrée dans un tableau float64 numpy. numpy le convertit ensuite correctement en float64

Essayez quelque chose comme ça:

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

La sortie (testée avec Python 2.7)

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

a est dans votre cas le tableau tree.tree_.threshold

9
Glostas

Vous pouvez essayer ceci:

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