La façon dont à-peu-près de l'impression d'un numpy.tableau sans notation scientifique et avec précision donnée?
Je suis curieux de savoir s'il est possible d'imprimer formaté numpy.arrays
, par exemple, d'une manière similaire à ceci:
x = 1.23456
print '%.3f' % x
Si je veux imprimer le numpy.array
de la flotte, il imprime plusieurs décimales, souvent dans "scientifique", qui est plutôt difficile à lire, même pour de faibles dimensions des tableaux. Cependant, numpy.array
apparemment être imprimé comme une chaîne de caractères, c'est à dire, avec %s
. Est-il une solution pour cela?
cette discussion aussi, pourrait intéresser ceux qui finissent ici par une recherche google.
OriginalL'auteur camillio | 2010-05-23
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
set_printoptions
pour régler la précision de la sortie:Et
suppress
supprime l'utilisation de la notation scientifique pour les petits nombres:Voir le docs pour set_printoptions pour d'autres options.
Pour appliquer les options d'impression localement, à l'aide de NumPy 1.15.0 ou version ultérieure, vous pouvez utiliser le numpy.printoptions gestionnaire de contexte.
Par exemple, à l'intérieur de la
with-suite
precision=3
etsuppress=True
sont définies:Mais en dehors de la
with-suite
les options d'impression sont les paramètres par défaut:Si vous utilisez une version antérieure de NumPy, vous pouvez créer le gestionnaire de contexte
vous-même. Par exemple,
Pour prévenir les zéros d'être dépouillé de la fin de flotte:
np.set_printoptions
a maintenant unformatter
paramètre vous permet de spécifier un format de fonction pour chaque type.qui imprime
au lieu de
print
, mais vous pouvez utiliser un gestionnaire de contexte pour faire quelque chose de similaire. J'ai édité le post ci-dessus pour montrer ce que je veux dire.+1 pour le gestionnaire de contexte
votre
np.set_printoptions(precision=3)
supprimer la fin des zéros.. comment obtenez-vous de les afficher comme ceci[ 0.078 0.480 0.413 0.830 0.776 0.102 0.513 0.462 0.335 0.712]
?J'ai ajouté une façon de le faire ci-dessus.
Cela fonctionne très bien. Comme une note de côté, vous pouvez également utiliser
set_printoptions
si vous voulez une représentation de chaîne et pas nécessairement utiliserprint
. Vous pouvez les appeler__str__()
du tableau numpy instance et vous obtiendrez la chaîne mise en forme comme par le printoptions vous définissez.OriginalL'auteur unutbu
Unutbu a donné vraiment une réponse complète (ils ont reçu un +1 de moi aussi), mais ici, c'est une lo-tech alternative:
Comme une fonction (à l'aide de la
format()
syntaxe de mise en forme):Utilisation:
L'indice du tableau est accessible dans la chaîne de format:
OriginalL'auteur Caleb Hattingh
Vous pouvez obtenir un sous-ensemble de la
np.set_printoptions
fonctionnalités de lanp.array_str
de commande, qui ne s'applique qu'à une seule instruction print.http://docs.scipy.org/doc/numpy/reference/generated/numpy.array_str.html
Par exemple:
OriginalL'auteur Daniel Golden
La gemme qui le rend trop facile d'obtenir le résultat sous forme de chaîne de caractères (aujourd'hui dans numpy versions) est caché dans denis réponse:
np.array2string
OriginalL'auteur hamogu
Ans plus tard, un autre est ci-dessous. Mais pour une utilisation quotidienne je viens de
OriginalL'auteur denis
FYI Numpy 1.15 (date de sortie en attente)inclure un gestionnaire de contexte pour la définition des options d'impression localement. Cela signifie que les éléments suivants sont les mêmes que l'exemple correspondant dans la accepté de répondre à (par unutbu et Neil G) sans avoir à écrire votre propre gestionnaire de contexte. E. g., à l'aide de leur exemple:
OriginalL'auteur Justin Lanfranchi
Et voici ce que j'utilise, et c'est assez simple:
OriginalL'auteur utdemir
Je veux souvent des colonnes différentes pour avoir des formats différents. Voici comment j'ai l'impression d'un simple tableau 2D en utilisant une certaine variété dans la mise en forme par la conversion en tranches (de) mon tableau NumPy à un n-uplet:
OriginalL'auteur AstroFloyd
numpy.char.mod
peuvent également être utiles, selon les détails de votre demande par exemple:numpy.char.mod('Value=%4.2f', numpy.arange(5, 10, 0.1))
retournera un tableau de chaînes avec des éléments "Value=5.00", "Value=5.10" etc. (comme un peu artificiel exemple).OriginalL'auteur jtniehof
Je trouve que le format flottant {:9.5 f} fonctionne correctement -- suppression de faible valeur de e-notations -- lors de l'affichage d'une liste ou d'un tableau à l'aide d'une boucle. Mais ce format, parfois, ne parvient pas à réprimer son e-notation lorsqu'un formateur a plusieurs éléments dans une seule instruction print. Par exemple:
Mes résultats montrent que le bug dans les cas 4, 5 et 6:
Je n'ai aucune explication à cela, et donc j'ai toujours utiliser une boucle pour les variables de sortie de plusieurs valeurs.
OriginalL'auteur Mike Lampton
- Je utiliser
Il n'est pas difficile de le modifier pour le multi-dimensions des tableaux.
OriginalL'auteur albapa
Encore une autre option est d'utiliser le
decimal
module:OriginalL'auteur jpp
Été surpris de ne pas voir
around
méthode mentionné signifie pas jouer avec les options d'impression.OriginalL'auteur Miss Palmer
La numpy tableaux ont la méthode
round(precision)
qui retourne un nouveau tableau numpy avec des éléments arrondis en conséquence.OriginalL'auteur Ștefan