Ik heb een numpy array, bijvoorbeeld:
points = np.array([[-468.927, -11.299, 76.271, -536.723],
[-429.379, -694.915, -214.689, 745.763],
[ 0., 0., 0., 0. ]])
als ik het afdruk of er een string van maak met str() krijg ik:
print w_points
[[-468.927 -11.299 76.271 -536.723]
[-429.379 -694.915 -214.689 745.763]
[ 0. 0. 0. 0. ]]
Ik moet er een string van maken die wordt afgedrukt met scheidingskomma’s terwijl de 2D-arraystructuur behouden blijft, dat wil zeggen:
[[-468.927, -11.299, 76.271, -536.723],
[-429.379, -694.915, -214.689, 745.763],
[ 0., 0., 0., 0. ]]
Weet iemand een gemakkelijke manier om een numpy array om te zetten in die vorm van string?
Ik weet dat .tolist() de komma’s toevoegt, maar het resultaat verliest de 2D-structuur.
Antwoord 1, autoriteit 100%
Probeer repr
te gebruiken
>>> 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. ]])
Als u van plan bent grote numpy-arrays te gebruiken, stelt u eerst np.set_printoptions(threshold=np.nan)
in. Zonder dit wordt de array-representatie afgekapt na ongeveer 1000 items (standaard).
>>> arr = np.arange(1001)
>>> print(repr(arr))
array([ 0, 1, 2, ..., 998, 999, 1000])
Natuurlijk, als je zo grote arrays hebt, wordt dit minder nuttig en moet je de gegevens waarschijnlijk op een andere manier analyseren dan er alleen naar te kijken en er zijn betere manierenom een numpy-array te behouden dan zijn repr
in een bestand op te slaan. ..
Antwoord 2, autoriteit 49%
Nu, in numpy 1.11, is er 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]]
Vergeleken met repr
van @mgilson (toont “array()” en 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)
P.S. Heb nog steeds np.set_printoptions(threshold=np.nan)
nodig voor grote array.
Antwoord 3, autoriteit 3%
Een andere manier om dit te doen, wat vooral handig is als een object geen __repr__()-methode heeft, is door de pprint-module van Python te gebruiken (die verschillende opmaakopties heeft). Zo ziet dat er bijvoorbeeld uit:
>>> 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])
Antwoord 4
De functie die je zoekt is np.set_string_function
. bron
Wat deze functie doet, is dat je de standaardfuncties __str__
of __repr__
voor de numpy-objecten kunt overschrijven. Als u de vlag repr
instelt op True, wordt de functie __repr__
overschreven door uw aangepaste functie. Evenzo, als u repr=False
instelt, wordt de functie __str__
overschreven. Aangezien print
de functie __str__
van het object aanroept, moeten we repr=False
instellen.
Bijvoorbeeld:
np.set_string_function(lambda x: repr(x), repr=False)
x = np.arange(5)
print(x)
drukt de uitvoer af
array([0, 1, 2, 3, 4])
Een meer esthetisch aangename versie is
np.set_string_function(lambda x: repr(x).replace('(', '').replace(')', '').replace('array', '').replace(" ", ' ') , repr=False)
print(np.eye(3))
wat geeft
[[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]]
Ik hoop dat dit je vraag beantwoordt.