Je suis curieux de savoir s'il existe un moyen d'imprimer formaté numpy.arrays
, par exemple d'une manière similaire à ceci:
x = 1.23456
print '%.3f' % x
Si je veux imprimer les numpy.array
flottants, il imprime plusieurs décimales, souvent au format «scientifique», ce qui est assez difficile à lire même pour les tableaux de faible dimension. Cependant, il numpy.array
doit apparemment être imprimé sous forme de chaîne, c'est-à-dire avec %s
. Y a-t-il une solution à cela?
python
numpy
python-2.x
pretty-print
camillio
la source
la source
Réponses:
Vous pouvez utiliser
set_printoptions
pour définir la précision de la sortie:Et
suppress
supprime l'utilisation de la notation scientifique pour les petits nombres:Voir les documents 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 gestionnaire de contexte numpy.printoptions . Par exemple, à l'intérieur de
with-suite
precision=3
etsuppress=True
sont définis:Mais en dehors des
with-suite
options d'impression sont de retour aux 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 éviter que les zéros ne soient retirés de l'extrémité des flotteurs:
np.set_printoptions
possède désormais unformatter
paramètre qui vous permet de spécifier une fonction de formatage pour chaque type.qui imprime
au lieu de
la source
print
, mais vous pouvez utiliser un gestionnaire de contexte pour créer quelque chose de similaire. J'ai édité le post ci-dessus pour montrer ce que je veux dire.np.set_printoptions(precision=3)
supprimez les zéros de fin .. comment les faire afficher comme ça[ 0.078 0.480 0.413 0.830 0.776 0.102 0.513 0.462 0.335 0.712]
?set_printoptions
si vous voulez une représentation sous forme de chaîne et pas nécessairement utiliserprint
. Vous pouvez simplement appeler__str__()
l'instance du tableau numpy et vous obtiendrez la chaîne formatée selon les options d'impression que vous définissez.Vous pouvez obtenir un sous-ensemble des
np.set_printoptions
fonctionnalités de lanp.array_str
commande, qui ne s'applique qu'à une seule instruction d'impression.http://docs.scipy.org/doc/numpy/reference/generated/numpy.array_str.html
Par exemple:
la source
Unutbu a donné une réponse vraiment complète (ils ont aussi obtenu un +1 de moi), mais voici une alternative lo-tech:
En tant que fonction (en utilisant la
format()
syntaxe de formatage):Usage:
L'index du tableau est accessible dans la chaîne de format:
la source
FYI Numpy 1.15 (date de sortie en attente) inclura un gestionnaire de contexte pour définir les options d'impression localement . Cela signifie que ce qui suit fonctionnera de la même manière que l'exemple correspondant dans la réponse acceptée (par unutbu et Neil G) sans avoir à écrire votre propre gestionnaire de contexte. Par exemple, en utilisant leur exemple:
la source
Le joyau qui rend trop facile l'obtention du résultat sous forme de chaîne (dans les versions numpy d'aujourd'hui) est caché dans la réponse denis:
np.array2string
la source
Des années plus tard, un autre est en dessous. Mais pour un usage quotidien, je
la source
Et voici ce que j'utilise, et c'est assez simple:
la source
A été surpris de ne pas voir la
around
méthode mentionnée - signifie qu'il ne faut pas jouer avec les options d'impression.la source
Je souhaite souvent que différentes colonnes aient des formats différents. Voici comment j'imprime un tableau 2D simple en utilisant une variété de formatage en convertissant (des tranches de) mon tableau NumPy en un tuple:
la source
numpy.char.mod
peut également être utile, selon les détails de votre application, par exemple:numpy.char.mod('Value=%4.2f', numpy.arange(5, 10, 0.1))
retournera un tableau de chaînes avec les éléments "Value = 5.00", "Value = 5.10" etc. (comme un exemple quelque peu artificiel).la source
Les tableaux numpy ont la méthode
round(precision)
qui retourne un nouveau tableau numpy avec des éléments arrondis en conséquence.la source
Je trouve que le format flottant habituel {: 9.5f} fonctionne correctement - en supprimant les notations électroniques de petite valeur - lors de l'affichage d'une liste ou d'un tableau à l'aide d'une boucle. Mais ce format échoue parfois à supprimer sa notation électronique lorsqu'un formateur a plusieurs éléments dans une seule instruction d'impression. Par exemple:
Mes résultats montrent le bogue dans les cas 4, 5 et 6:
Je n'ai aucune explication à cela, et donc j'utilise toujours une boucle pour une sortie flottante de plusieurs valeurs.
la source
j'utilise
Il n'est pas difficile de le modifier pour les tableaux multidimensionnels.
la source
Encore une autre option consiste à utiliser le
decimal
module:la source