2013-05-07 16 views
17

I eine numpy Array haben, zum Beispiel:Zeichenfolgendarstellung eines numpy Array mit Komma seine Elemente trenn

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

wenn ich es drucken oder in einen String mit str drehen() I erhalten:

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

ich es in einen String drehen müssen, die Kommas mit Trenn druckt, während der Array-Struktur 2D zu halten, das heißt:

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

Kennt jemand eine einfache Möglichkeit, ein numpiges Array in diese Form von String zu verwandeln?

Ich weiß, dass .tolist() fügt die Kommas, aber das Ergebnis verliert die 2D-Struktur.

+0

Was wollen Sie mit diesem Format? –

+0

bist du in BME230 lol? Ich hatte genau die gleiche Frage und das war die perfekte Antwort. –

+0

numpy.set_printoptions sollte wirklich eine Option dafür haben – Fnord

Antwort

30

Versuchen Sie es mit 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. ]]) 

Wenn Sie sich mit großen numpy Arrays planen, setzen np.set_printoptions(threshold=np.nan) zuerst. Ohne sie wird die Array-Darstellung nach etwa 1000 Einträgen abgeschnitten (standardmäßig).

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

Natürlich, wenn Sie Arrays haben, die groß ist, beginnt diese weniger nützlich zu werden und Sie sollten wahrscheinlich die Daten etwas andere Weise als nur Blick auf sie analysieren und es gibt better ways eines numpy Array persistierenden als es zu speichern ist repr zu einer Datei ...

+0

wow! Das war eine schnelle Antwort! das habe ich gebraucht, danke. Ich werde akzeptieren, sobald 10 Minuten vorbei sind – martinako

2

Eine andere Möglichkeit, dies zu tun, die besonders hilfreich ist, wenn ein Objekt keine __repr __() -Methode hat, ist die Verwendung von Pythons pprint-Modul (mit verschiedenen Formatierungsoptionen). Hier ist, wie das aussieht, mit gutem Beispiel:

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

nun in numpy 1.11 gibt es 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]] 

Vergleich mit repr von @mgilson (zeigt "Array()" und 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 Immer noch np.set_printoptions(threshold=np.nan) für große Array.