2013-05-07 8 views
17

Ho una matrice NumPy, ad esempio:stringa di una matrice NumPy con una virgola separa i suoi elementi

points = np.array([[-468.927, -11.299, 76.271, -536.723], 
        [-429.379, -694.915, -214.689, 745.763], 
        [ 0.,  0.,  0.,  0. ]]) 

se stampo o trasformarlo in una stringa con str() ottengo:

print w_points 
[[-468.927 -11.299 76.271 -536.723] 
[-429.379 -694.915 -214.689 745.763] 
[ 0.  0.  0.  0. ]] 

ho bisogno di trasformarlo in una stringa che stampa con separazione virgola mantenendo la struttura a matrice 2D, cioè:

[[-468.927, -11.299, 76.271, -536.723], 
[-429.379, -694.915, -214.689, 745.763], 
[ 0.,  0.,  0.,  0. ]] 

Qualcuno conosce un modo semplice per trasformare una matrice numpy in quella forma di stringa?

So che .tolist() aggiunge le virgole ma il risultato perde la struttura 2D.

+0

Cosa desideri con questo formato? –

+0

sei in BME230 lol? Ho avuto la stessa identica domanda e questa è stata la risposta perfetta. –

+0

numpy.set_printoptions dovrebbe davvero avere un'opzione per questo – Fnord

risposta

30

Provare a utilizzare repr

>>> import numpy as np 
>>> points = np.array([[-468.927, -11.299, 76.271, -536.723], 
...     [-429.379, -694.915, -214.689, 745.763], 
...     [ 0.,  0.,  0.,  0. ]]) 
>>> print repr(points) 
array([[-468.927, -11.299, 76.271, -536.723], 
     [-429.379, -694.915, -214.689, 745.763], 
     [ 0. , 0. , 0. , 0. ]]) 

Se si pensa di utilizzare array di grandi dimensioni NumPy, impostare np.set_printoptions(threshold=np.nan) prima. Senza di esso, la rappresentazione dell'array verrà troncata dopo circa 1000 voci (per impostazione predefinita).

>>> arr = np.arange(1001) 
>>> print repr(arr) 
array([ 0, 1, 2, ..., 998, 999, 1000]) 

Naturalmente, se si dispone di array di grandi dimensioni, questo inizia a diventare meno utile e probabilmente si dovrebbe analizzare i dati in qualche modo diverso da solo a guardarla e ci sono better ways di persistere una matrice NumPy che salvare è repr in un file ...

+0

Eeeek !!! questa è stata una risposta veloce! questo è quello di cui avevo bisogno, grazie. Accetterò una volta trascorsi 10 minuti – martinako

2

Un altro modo per farlo, che è particolarmente utile quando un oggetto non ha un metodo __repr __(), è di utilizzare il modulo pprint di Python (che ha varie opzioni di formattazione). Ecco cosa che sembra, con l'esempio:

>>> import numpy as np 
>>> import pprint 
>>> 
>>> A = np.zeros(10, dtype=np.int64) 
>>> 
>>> print(A) 
[0 0 0 0 0 0 0 0 0 0] 
>>> 
>>> pprint.pprint(A) 
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) 
9

Ora, in NumPy 1.11, c'è numpy.array2string:

In [279]: a = np.reshape(np.arange(25, dtype='int8'), (5, 5)) 

In [280]: print(np.array2string(a, separator=', ')) 
[[ 0, 1, 2, 3, 4], 
[ 5, 6, 7, 8, 9], 
[10, 11, 12, 13, 14], 
[15, 16, 17, 18, 19], 
[20, 21, 22, 23, 24]] 

Confronto con repr da @mgilson (spettacoli "array()" e dtype) :

In [281]: print(repr(a)) 
array([[ 0, 1, 2, 3, 4], 
     [ 5, 6, 7, 8, 9], 
     [10, 11, 12, 13, 14], 
     [15, 16, 17, 18, 19], 
     [20, 21, 22, 23, 24]], dtype=int8) 

PS Ancora bisogno di np.set_printoptions(threshold=np.nan) per array di grandi dimensioni.

Problemi correlati