2012-02-20 15 views
21

Chcę przekonwertować a = [1,2,3,4,5] na a_string = "1 2 3 4 5". Prawdziwa zmienna tablica jest dość duża (50000 x 200), więc zakładam, że użycie for loops jest zbyt wolne.Jak wydrukować tablicę Numpy bez nawiasów?

+0

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

+3

Czy na pewno naprawdę potrzebujesz reprezentacji ciągów dla tej dużej tablicy? Po co? –

+0

Następnie muszę zapisać to i trzy inne tablice do pliku. Wszystkie macierze mają różne rozmiary i muszę je zapisać naprzemiennie w pliku, więc planuję zrobić to ręcznie za pomocą 'writeline'. – Framester

Odpowiedz

32

Można użyć metody join z ciągiem:

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

Przepraszam, poprawiono – tito

+0

dziękuję, wcześniej próbowałem 'join' bez powodzenia. "Mapa" to dla mnie brakujący element. – Framester

+2

prostszy wariant (IMHO) byłby z iteratorem: ''' .join (str (n) dla n w a)' – alexis

3

Numpy zapewnia dwie funkcje dla tego array_str i array_repr - z których każdy powinien pasować do Twoich potrzeb. Ponieważ można użyć jednej, oto przykład każda:

>>> 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]])' 

Te dwie funkcje są zarówno wysoce zoptymalizowany i jako takie powinny być preferowane nad funkcji można napisać samemu. Kiedy mam do czynienia z tablicami tej wielkości, wyobrażam sobie, że chcesz uzyskać wszystkie możliwe prędkości.

+1

Korzystanie z wbudowanych funkcji jest zdecydowanie korzystne, ale nadal pozostawia nawiasy. Tak więc to metoda superior dla innych, ale podobnych przypadków. +1 – Framester

+0

Powiedziałeś, że potrzebujesz zapisać ciąg do pliku. Jeśli masz plany dotyczące późniejszego pobierania ciągu znaków z tego pliku, przydatne może być użycie nawiasów. Ponadto kombinacja pod-łańcuchów i podziałów() usunie nawiasy. – mau5padd

3

Jeśli masz numpy tablicy na początek zamiast listy (ponieważ można wymienić „prawdziwy numpy tablicy” w swoim poście) można wykorzystać re.sub na ciąg znaków z tablicy:

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

Ponownie, zakładamy, że Twoja tablica a była tablicą numpy w pewnym momencie. Ma to tę zaletę, że działa również na macierzach.

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) 

wyjściowa:

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

Albo jeśli tablica jest odwrócony:

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

lub jeśli naprawdę potrzebują ciąg:

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

można sterować precyzję z fmt uzyskanie:

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

wyjściowy:

0.000 1.000 2.000 3.000 

czyli

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

wyjściowa:

0 1 2 3 

Testowany na Pythonie 2.7.12, numpy 1.11.1.

Powiązane problemy