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)