Używam Numpy. Mam macierz z 1 kolumną i N wierszami i chcę uzyskać tablicę z N elementów.
Na przykład, jeśli mam M = matrix([[1], [2], [3], [4]])
, chcę dostać A = array([1,2,3,4])
.
Aby to osiągnąć, używam A = np.array(M.T)[0]
. Czy ktoś zna bardziej elegancki sposób na uzyskanie tego samego rezultatu?
Dzięki!
Odpowiedzi:
Jeśli chcesz czegoś bardziej czytelnego, możesz to zrobić:
Możesz też zrobić:
A = np.asarray(M).reshape(-1)
ale to trochę trudniejsze do odczytania.źródło
numpy.matrix
jest nieco kontrowersyjną kwestią, ale tępi deweloperzy bardzo się z tobą zgadzają, że posiadanie obu jest nieprzyjemne i denerwujące z wielu powodów. Jednak ilość starego, nieobsługiwanego kodu „na wolności”, który wykorzystuje,matrix
utrudnia jego całkowite usunięcie.sklearn
.). W rzeczywistości istnieją różnesparse matrix
typyscipy
, które umożliwiają efektywny dostęp przez wiersze lub kolumny. Wyobrażam sobie, że może to być problem związany z łączeniem koncepcji macierzy i tablicy. To powiedziawszy, zastanawiam się, czy można by również wprowadzićsparse array
typ i czy są jakieś plany, aby to zrobić. Jakieś wskazówki?https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.matrix.A1.html
źródło
zależy od tego, co masz na myśli mówiąc o elegancji, ale to właśnie bym zrobił
źródło
Możesz wypróbować następujący wariant:
źródło
Jeśli zależy Ci na szybkości; Ale jeśli zależy Ci na pamięci:
źródło
Lub możesz spróbować uniknąć niektórych tymczasowych problemów
źródło
Po pierwsze,
Mv = numpy.asarray(M.T)
co daje tablicę 4x1, ale 2D.Następnie wykonaj
A = Mv[0,:]
, co da ci to, czego chcesz. Możesz je połączyć, jaknumpy.asarray(M.T)[0,:]
.źródło
Spowoduje to konwersję macierzy na tablicę
źródło
Funkcje ravel () i flatten () z numpy to dwie techniki, które chciałbym tutaj wypróbować. Będę chciał dodać do słupków wykonanych przez Joe , Siraj , bańki i Kevad .
Strzępy:
Spłaszczyć:
numpy.ravel()
jest szybszy , ponieważ jest to funkcja na poziomie biblioteki, która nie tworzy żadnej kopii tablicy. Jednak każda zmiana w tablicy A zostanie przeniesiona do oryginalnej tablicy M, jeśli używasznumpy.ravel()
.numpy.flatten()
jest wolniejszy niżnumpy.ravel()
. Ale jeśli używasznumpy.flatten()
, aby utworzyć, a następnie zmiany w nie zostaną przeniesione do oryginalnej macierzy M .numpy.squeeze()
iM.reshape(-1)
są wolniejsze niżnumpy.flatten()
inumpy.ravel()
.źródło