Numpy matrix naar array

Ik gebruik numpy. Ik heb een matrix met 1 kolom en N rijen en ik wil een array krijgen met N elementen.

Als ik bijvoorbeeld M = matrix([[1], [2], [3], [4]])heb, wil ik A = array([1,2,3,4]).

Om dit te bereiken, gebruik ik A = np.array(M.T)[0]. Weet iemand een elegantere manier om hetzelfde resultaat te krijgen?

Bedankt!


Antwoord 1, autoriteit 100%

Als je iets beter leesbaars wilt, kun je dit doen:

A = np.squeeze(np.asarray(M))

Je zou ook kunnen doen: A = np.asarray(M).reshape(-1), maar dat is wat minder gemakkelijk te lezen.


Antwoord 2, autoriteit 61%

result = M.A1

https://docs. scipy.org/doc/numpy-1.14.0/reference/generated/numpy.matrix.A1.html

matrix.A1
1-d base array

Antwoord 3, autoriteit 6%

A, = np.array(M.T)

hangt af van wat je bedoelt met elegantie denk ik, maar dat is wat ik zou doen


Antwoord 4, autoriteit 5%

Je kunt de volgende variant proberen:

result=np.array(M).flatten()

Antwoord 5, autoriteit 4%

np.array(M).ravel()

Als je om snelheid geeft; Maar als je om geheugen geeft:

np.asarray(M).ravel()

Antwoord 6, autoriteit 3%

Of je zou kunnen proberen om wat uitzendkrachten te vermijden met

A = M.view(np.ndarray)
A.shape = -1

Antwoord 7

Eerst Mv = numpy.asarray(M.T), wat u een 4×1 maar 2D-array geeft.

Voer vervolgens A = Mv[0,:]uit, wat je geeft wat je wilt. Je zou ze samen kunnen voegen, als numpy.asarray(M.T)[0,:].


Antwoord 8

Hierdoor wordt de matrix omgezet in een array

A = np.ravel(M).T

Antwoord 9

ravel()en flatten()functies van numpy zijn twee technieken die ik hier zou proberen. Ik wil graag iets toevoegen aan de berichten van Joe, Siraj, bubbleen Kevad.

Ravel:

A = M.ravel()
print A, A.shape
>>> [1 2 3 4] (4,)

Afvlakken:

M = np.array([[1], [2], [3], [4]])
A = M.flatten()
print A, A.shape
>>> [1 2 3 4] (4,)

numpy.ravel()is sneller, omdat het een functie op bibliotheekniveau is die geen enkele kopie van de array maakt. elke wijziging in array A wordt echter overgedragen naar de oorspronkelijke array M als je numpy.ravel()gebruikt.

numpy.flatten()is langzamer dan numpy.ravel(). Maar als u numpy.flatten()gebruikt om A te maken, dan worden wijzigingen in A niet overgedragen naar de oorspronkelijke array M.

numpy.squeeze()en M.reshape(-1)zijn langzamer dan numpy.flatten()en numpy.ravel().

%timeit M.ravel()
>>> 1000000 loops, best of 3: 309 ns per loop
%timeit M.flatten()
>>> 1000000 loops, best of 3: 650 ns per loop
%timeit M.reshape(-1)
>>> 1000000 loops, best of 3: 755 ns per loop
%timeit np.squeeze(M)
>>> 1000000 loops, best of 3: 886 ns per loop

Antwoord 10

Kwam een beetje laat binnen, ik hoop dat iemand hier iets aan heeft,

np.array(M.flat)

Other episodes