2012-02-20 59 views
21

Quiero convertir a = [1,2,3,4,5] en a_string = "1 2 3 4 5". La matriz numpy real es bastante grande (50000x200) así que supongo que usar for loops es demasiado lento.Cómo imprimir una matriz Numpy sin corchetes?

+0

: verifique esto http://stackoverflow.com/questions/5365520/numpy-converting-array-from-float-to-strings – George

+3

¿Está seguro de que realmente necesita una representación de cadena para esa gran matriz? ¿Para qué? –

+0

Después necesito escribir esto y otras tres matrices en un archivo. Todas las matrices tienen diferentes tamaños y tengo que escribirlas alternando en el archivo, así que estoy planeando hacerlo manualmente usando 'writeline'. – Framester

Respuesta

32

Usted puede utilizar el método join de cadena:

>>> a = [1,2,3,4,5] 
>>> ' '.join(map(str, a)) 
"1 2 3 4 5" 
+0

Lo siento, lo solucioné – tito

+0

gracias, intenté 'join' sin éxito antes. 'Map' es la pieza que falta para mí. – Framester

+2

una variante más simple (en mi humilde opinión) sería con un iterador: ''' .join (str (n) para n en a)' – alexis

3

Numpy proporciona dos funciones para este array_str y array_repr - ya sea de los cuales debe ajustarse a sus necesidades. Dado que se puede utilizar ya sea, he aquí un ejemplo de cada uno:

>>> from numpy import arange, reshape, array_str 
>>> M = arange(10).reshape(2,5) 
>>> M 
array([[0, 1, 2, 3, 4], 
     [5, 6, 7, 8, 9]]) 
>>> array_str(M) 
'[[0 1 2 3 4]\n [5 6 7 8 9]]' 
>>> array_repr(M) 
'array([[0, 1, 2, 3, 4],\n  [5, 6, 7, 8, 9]])' 

Estas dos funciones son altamente optimizados y, como tal, debe ser preferida a través de una función que puede ser que escriba usted mismo. Cuando se trata de matrices de este tamaño, me imagino que querrás toda la velocidad que puedas obtener.

+1

Usar funciones incorporadas definitivamente es una ventaja, pero aún deja los paréntesis adentro. Así que esto método superior para otros casos, pero similares. +1 – Framester

+0

Dijiste que necesitas guardar la cadena en un archivo. Si tiene planes de recuperar más tarde la cadena de ese archivo, podría ser útil tener los corchetes. Además, una combinación de sub-cadenas y divisiones() eliminaría los corchetes. – mau5padd

3

Si tiene una matriz numpy , para empezar en lugar de una lista (ya que usted menciona una "matriz numpy real" en su entrada) se puede utilizar re.sub en la representación de cadena de la matriz:

print(re.sub('[\[\]]', '', np.array_str(a))) 

De nuevo, esto supone que su matriz a era una matriz numpy en algún momento. Esto tiene la ventaja de trabajar también en matrices.

4

np.savetxt

import numpy as np 
import sys 

a = np.array([[0.0, 1.0, 2.0, 3.0]]) 
np.savetxt(sys.stdout, a) 

Salida:

0.000000000000000000e+00 1.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00 

O si la matriz se invierte:

a = np.array([0.0, 1.0, 2.0, 3.0]) 
np.savetxt(sys.stdout, a, newline=" ") 

O si realmente necesita una cadena:

import StringIO 
s = StringIO.StringIO() 
np.savetxt(s, a) 
print s.getvalue() 

Se puede controlar con precisión para obtener fmt:

np.savetxt(sys.stdout, a, fmt="%.3f") 

de salida:

0.000 1.000 2.000 3.000 

o:

np.savetxt(sys.stdout, a, fmt="%i") 

de salida:

0 1 2 3 

Probado en Python 2.7.12, numpy 1.11.1.

Cuestiones relacionadas