J'ai une liste Python imbriquée qui ressemble à ce qui suit:
my_list = [[3.74, 5162, 13683628846.64, 12783387559.86, 1.81],
[9.55, 116, 189688622.37, 260332262.0, 1.97],
[2.2, 768, 6004865.13, 5759960.98, 1.21],
[3.74, 4062, 3263822121.39, 3066869087.9, 1.93],
[1.91, 474, 44555062.72, 44555062.72, 0.41],
[5.8, 5006, 8254968918.1, 7446788272.74, 3.25],
[4.5, 7887, 30078971595.46, 27814989471.31, 2.18],
[7.03, 116, 66252511.46, 81109291.0, 1.56],
[6.52, 116, 47674230.76, 57686991.0, 1.43],
[1.85, 623, 3002631.96, 2899484.08, 0.64],
[13.76, 1227, 1737874137.5, 1446511574.32, 4.32],
[13.76, 1227, 1737874137.5, 1446511574.32, 4.32]]
J'importe ensuite Numpy, et je définis les options d'impression sur (suppress=True)
. Lorsque je crée un tableau:
my_array = numpy.array(my_list)
Je ne peux pas pour la vie de moi supprimer la notation scientifique:
[[ 3.74000000e+00 5.16200000e+03 1.36836288e+10 1.27833876e+10
1.81000000e+00]
[ 9.55000000e+00 1.16000000e+02 1.89688622e+08 2.60332262e+08
1.97000000e+00]
[ 2.20000000e+00 7.68000000e+02 6.00486513e+06 5.75996098e+06
1.21000000e+00]
[ 3.74000000e+00 4.06200000e+03 3.26382212e+09 3.06686909e+09
1.93000000e+00]
[ 1.91000000e+00 4.74000000e+02 4.45550627e+07 4.45550627e+07
4.10000000e-01]
[ 5.80000000e+00 5.00600000e+03 8.25496892e+09 7.44678827e+09
3.25000000e+00]
[ 4.50000000e+00 7.88700000e+03 3.00789716e+10 2.78149895e+10
2.18000000e+00]
[ 7.03000000e+00 1.16000000e+02 6.62525115e+07 8.11092910e+07
1.56000000e+00]
[ 6.52000000e+00 1.16000000e+02 4.76742308e+07 5.76869910e+07
1.43000000e+00]
[ 1.85000000e+00 6.23000000e+02 3.00263196e+06 2.89948408e+06
6.40000000e-01]
[ 1.37600000e+01 1.22700000e+03 1.73787414e+09 1.44651157e+09
4.32000000e+00]
[ 1.37600000e+01 1.22700000e+03 1.73787414e+09 1.44651157e+09
4.32000000e+00]]
Si je crée directement un tableau numpy simple:
new_array = numpy.array([1.5, 4.65, 7.845])
Je n'ai aucun problème et il s'imprime comme suit:
[ 1.5 4.65 7.845]
Quelqu'un sait-il quel est mon problème?
numpy.set_printoptions
contrôle la façon dont les tableaux numpy sont imprimés. Cependant, il n'y a pas d'option pour supprimer complètement la notation scientifique. Cela change parce que vous avez des valeurs allant de 1e-2 à 1e9. Si vous avez une plage plus petite, il n'utilisera pas de notation scientifique pour les afficher. Pourquoi la façon dont ils sont affichés est-elle importanteprint
? Si vous essayez de le sauvegarder, utilisezsavetxt
, etc.Réponses:
Je suppose que ce dont vous avez besoin est
np.set_printoptions(suppress=True)
, pour plus de détails, voir ici: http://pythonquirks.blogspot.fr/2009/10/controlling-printing-in-numpy.htmlPour la documentation numpy de SciPy.org, qui inclut tous les paramètres de fonction (la suppression n'est pas détaillée dans le lien ci-dessus), voir ici: https://docs.scipy.org/doc/numpy/reference/generated/numpy.set_printoptions.html
la source
np.set_printoptions(formatter={'all':lambda x: str(x)})
Python Force-supprime toutes les notations exponentielles lors de l'impression de ndarrays numpy, de la justification du texte, de l'arrondi et des options d'impression:
Ce qui suit est une explication de ce qui se passe, faites défiler vers le bas pour les démos de code.
Passer le paramètre
suppress=True
à la fonctionset_printoptions
ne fonctionne que pour les nombres qui correspondent à l'espace de 8 caractères par défaut qui lui est alloué, comme ceci:Cependant, si vous passez un nombre supérieur à 8 caractères de large, la notation exponentielle est à nouveau imposée, comme ceci:
numpy a le choix entre couper votre nombre en deux et donc le déformer, ou forcer la notation exponentielle, il choisit cette dernière.
Ici vient
set_printoptions(formatter=...)
à la rescousse de spécifier les options d'impression et d'arrondi. Ditesset_printoptions
simplement d'imprimer un flotteur nu:Nous avons supprimé la notation exponentielle de force, mais elle n'est ni arrondie ni justifiée, alors spécifiez des options de formatage supplémentaires:
L'inconvénient de la suppression de force de toute notion exponentielle dans ndarrays est que si votre ndarray obtient une valeur flottante énorme près de l'infini et que vous l'imprimez, vous allez vous faire exploser au visage avec une page pleine de nombres.
Exemple complet de démonstration 1:
Impressions:
Exemple complet de démonstration 2:
Impressions:
Notez que l'arrondi est cohérent avec une précision de 2 unités et que la notation exponentielle est supprimée dans les très grandes
e+x
et très petitese-x
plages.la source
pour les tableaux 1D et 2D, vous pouvez utiliser np.savetxt pour imprimer en utilisant une chaîne de format spécifique:
Vos options avec numpy.set_printoptions ou numpy.array2string dans la v1.3 sont assez maladroites et limitées (par exemple, aucun moyen de supprimer la notation scientifique pour les grands nombres). Il semble que cela changera avec les versions futures, avec numpy.set_printoptions (formatter = ..) et numpy.array2string (style = ..).
la source
Vous pouvez écrire une fonction qui convertit une notation scientifique en notation régulière, quelque chose comme
la source