2013-05-07 22 views
17

mam numpy tablicę, na przykład:ciąg z numpy tablicy z przecinki oddzielające jego elementy

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

gdybym go wydrukować lub zamienić go w ciąg ze str() uzyskać:

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

muszę przekształcić go w ciąg, który drukuje z przecinki oddzielające zachowując strukturę tablicy 2D, czyli:

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

Czy ktoś wie, jak łatwo zmienić tablicę numpy w tę formę łańcucha?

Wiem, że .tolist() dodaje przecinki, ale wynik traci strukturę 2D.

+0

Czego chcesz w tym formacie? –

+0

jesteś w BME230 lol? Miałem dokładnie to samo pytanie i to była doskonała odpowiedź. –

+0

numpy.set_printoptions naprawdę powinno mieć opcję dla tego – Fnord

Odpowiedz

30

Spróbuj użyć 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. ]]) 

Jeśli planujesz używać tablic duża NumPy ustaw np.set_printoptions(threshold=np.nan) pierwszy. Bez niego reprezentacja tablicy zostanie obcięta po około 1000 wpisów (domyślnie).

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

Oczywiście, jeśli masz tablice że duża, to zaczyna się mniej użyteczne i powinieneś przeanalizować dane jakiś inny sposób niż po prostu patrząc na niego i istnieją better ways z utrzymującej się numpy tablicy niż oszczędność to repr do pliku ...

+0

wow! to była szybka odpowiedź! tego właśnie potrzebowałem, dzięki. Przyjmuję, że kiedyś minęło 10 minut – martinako

2

Innym sposobem wykonania tej czynności, która jest szczególnie przydatna, gdy obiekt nie ma metody __repr __(), jest użycie modułu Pprint Pythona (który ma różne opcje formatowania). Oto, co to wygląda, przez przykład:

>>> 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

Teraz w numpy 1,11, istnieje 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]] 

Porównując z repr z @mgilson (pokazy "array()" i 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 Nadal potrzebujesz np.set_printoptions(threshold=np.nan) dla dużej macierzy.

Powiązane problemy