Supprimer la Notation Scientifique dans Numpy Lors de la Création de Tableau De Liste Imbriquée
J'ai un imbriquée Python liste qui ressemble à la suivante:
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]]
Je puis import Numpy, et de définir les options d'impression pour (suppress=True)
. Lorsque je crée un tableau:
my_array = numpy.array(my_list)
Je ne peux pas pour la vie de me 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éer un simple tableau numpy directement:
new_array = numpy.array([1.5, 4.65, 7.845])
Je n'ai pas de problème et il imprime comme suit:
[ 1.5 4.65 7.845]
Personne ne sait à quoi mon problème?
numpy.set_printoptions
contrôle la manière dont les tableaux numpy sont imprimés. Cependant, il n'y a pas d'option pour supprimer entièrement scientifique notatation. C'est le changement parce que vous avez des valeurs allant de 1e-2 jusqu'à 1e9. Si vous avez un plus petit de la gamme, il ne sera pas utiliser la notation scientifique pour les afficher. Pourquoi importe-t-il la façon dont ils sont affichés avecprint
, si? Si vous essayez d'enregistrer, utilisezsavetxt
, etc.- Pas vraiment ce que vous demandez, mais l'utilisation de numpy.round (même avec une haute précision), j'ai été en mesure de supprimer la notation scientifique qui ressemblait 7.00000000 e+00 dans un SVD de la reconstruction de la matrice. En raison de la notation scientifique (?) il ne serait pas affirmer l'égalité de tous devant. Je suis le mentionner parce que np.set_printoptions(supprimer=True) n'a pas de travail pour résoudre ce problème pour moi.
Vous devez vous connecter pour publier un commentaire.
Je suppose que ce que vous avez besoin est
np.set_printoptions(suppress=True)
, pour les détails, voir ici:http://pythonquirks.blogspot.fr/2009/10/controlling-printing-in-numpy.html
Pour SciPy.org numpy documentation, qui comprend tous les paramètres de la fonction (supprimer n'est pas détaillé dans le lien ci-dessus), voir ici: https://docs.scipy.org/doc/numpy/reference/generated/numpy.set_printoptions.html
np.set_printoptions(formatter={'all':lambda x: str(x)})
Python Force-supprimer toutes notation exponentielle lors de l'impression de numpy ndarrays, de se quereller justification du texte, l'arrondissement et les options d'impression:
Ce qui suit est une explication de ce qui se passe, faites défiler vers le bas pour le code des démos.
Passage de paramètre
suppress=True
à la fonctionset_printoptions
ne fonctionne que pour les numéros qui correspondent à la valeur par défaut de 8 caractères espace alloué, comme ceci:Toutefois, si vous passez dans un certain nombre de plus de 8 caractères, notation exponentielle est imposée de nouveau, comme ceci:
numpy a un choix entre les hacher votre numéro dans la moitié donc fausse, ou de forcer la notation exponentielle, il choisit cette dernière.
Voici
set_printoptions(formatter=...)
à la rescousse pour spécifier les options d'impression et d'arrondi. Direset_printoptions
à imprimer nu nu float:Nous avons la force supprimé la notation exponentielle, mais il n'est pas arrondi ou justifié, donc spécifier d'autres options de mise en forme:
L'inconvénient de force-la suppression de tous exponentielle notion dans ndarrays est que si votre ndarray obtient une énorme valeur flottante près de l'infini, et vous l'imprimez, vous allez avoir dynamité dans le visage avec une page pleine de chiffres.
Exemple complet Démo 1:
Imprime:
Exemple complet de Démonstration 2:
Imprime:
Avis que l'arrondissement est conforme à 2 unités de précision, et de la notation exponentielle est supprimée à la fois la très grande
e+x
et les très petitese-x
plages.pour les codes 1D et 2D, des tableaux, vous pouvez utiliser np.savetxt pour imprimer à l'aide d'un format de chaîne de caractères:
De vos options avec numpy.set_printoptions ou numpy.array2string en v1.3 sont assez maladroit et limitée (par exemple pas de moyen de supprimer la notation scientifique pour les grands nombres). Il ressemble à ce qui va changer avec les futures versions, avec numpy.set_printoptions(formateur=..) et numpy.array2string(style=..).
Vous pouvez écrire une fonction qui convertit une notation scientifique à l'ordinaire, quelque chose comme