2012-03-22 18 views
8

Ho un allineamento NumPy 2-dimensionale che assomiglia a questo:Come stampare gli array Numpy senza alcuna notazione aggiuntiva (parentesi quadre [] e spazi tra gli elementi)?

[[a b c] 
[d e f] 
[g h i]] 

mi piacerebbe stampare senza alcuna della lanugine notazione predefinita che viene fornito in genere con gli array; vale a dire il [, ] e gli spazi tra gli elementi. Qualcosa di simile a questo:

abc 
def 
ghi 

E 'possibile fare una cosa del genere (senza un ciclo Python banale e forse costosa, ovviamente)?

Ho visto numpy.set_printoptions ma sembra che imposti solo le opzioni di presentazione su come vengono visualizzati gli elementi, non i caratteri in mezzo.

Edit: Gli elementi della matrice hanno una rappresentazione stringa che può essere qualsiasi cosa, compreso [, ] e spazi bianchi. esempio minimo di come costruire una tale varietà:

class custom(object): 
    def __repr__(self): 
     return 'a' 
a = numpy.empty((5, 5), custom) 
a.fill(custom()) 
print a 
+0

Giusto per essere chiari: il tuo repr personalizzato include un terminale '.' che si vuole sbarazzarsi di, ma potrebbe includere gli altri che non lo fai? Non sono sicuro di capire cosa vuoi spogliare. – DSM

+0

Il mio male, questo è dovuto al fatto che ho modificato la rappresentazione a mano. La mia domanda originale usava una serie numerica di numeri regolari, per i quali esiste un '.' dopo ogni numero usato come delimitatore (o come separatore decimale, non è sicuro). Successivamente, ho modificato la mia domanda per riflettere sul fatto che il tipo di dati dell'array non era necessariamente numerico e ha dimenticato di modificare il delimitatore di conseguenza. Modificato di nuovo –

+0

Sottoinsieme: solo rimuovere '[]': http://stackoverflow.com/questions/9360103/how-to-print-a-numpy-array-without-brackets/42046765#42046765 –

risposta

8

Mentre Questo più o meno pari a un ciclo, credo che questo è probabilmente il migliore che si vuole ottenere. Generalmente il metodo di stringa join è piuttosto veloce.

>>> a = np.array([[1,2,3],[2,4,6],[-1,-2,-3]]) 
>>> print '\n'.join(''.join(str(cell) for cell in row) for row in a) 
123 
246 
-1-2-3 

Penso che a questo punto probabilmente stareste meglio implementando qualcosa e misurando quanto tempo ci vuole. La mia ipotesi è che la parte più lenta del codice stamperà effettivamente in console, non unendo insieme le stringhe.

+0

Beh, immagino che questo significhi che non esiste un "modo intorpidito" per farlo. Grazie comunque –

0
>>> import numpy  
>>> a = numpy.array([[ 1.0, 2, 3], [ 4, 5, 6], [ 7, 8, 9]]) 
>>> print str(a).replace(' ','').replace('.','').replace('[','').replace(']','') 
123 
456 
789 
+0

+1 perché risponde alla domanda Ho chiesto, ma il vero array in questione utilizza un tipo di dati personalizzato per il quale la rappresentazione della stringa può essere qualsiasi cosa, inclusi spazi e parentesi. Modificato la domanda per riflettere questo –

+0

@Etienne Perot - torna al tavolo da disegno! – fraxel

3
np.savetxt(sys.stdout.buffer, a, fmt='%s', delimiter='') 
+0

Hai davvero bisogno di '.buffer' a' sys.stdout.buffer'? –

0

È abbastanza semplice, se a è l'array basta fare questo:

print(re.sub('[ ]+', ' ', re.sub(' *[\\[\\]] *', '', np.array_str(a)))) 
Problemi correlati