Ich benutze Numpy. Ich habe eine Matrix mit 1 Spalte und N Zeilen und möchte ein Array mit N Elementen erhalten.
Zum Beispiel, wenn ich habe M = matrix([[1], [2], [3], [4]])
, möchte ich bekommen A = array([1,2,3,4])
.
Um es zu erreichen, benutze ich A = np.array(M.T)[0]
. Kennt jemand einen eleganteren Weg, um das gleiche Ergebnis zu erzielen?
Vielen Dank!
Antworten:
Wenn Sie etwas besser lesbares möchten, können Sie dies tun:
Gleichermaßen könnten Sie auch: tun
A = np.asarray(M).reshape(-1)
, aber das ist etwas weniger leicht zu lesen.quelle
numpy.matrix
ist ein umstrittenes Thema, aber die numpy-Entwickler stimmen Ihnen sehr zu, dass es aus einer ganzen Reihe von Gründen unpythonisch und ärgerlich ist, beides zu haben. Die Menge an altem, nicht gepflegtem Code "in the wild", der verwendet wird,matrix
macht es jedoch schwierig, ihn vollständig zu entfernen.sklearn
. B. ). Tatsächlich gibt es verschiedenesparse matrix
Typenscipy
, die einen effizienten Zugriff über Zeilen oder Spalten ermöglichen. Ich stelle mir vor, dass dies ein Problem beim Zusammenführen der Konzepte von Matrix und Array sein könnte. Trotzdem frage ich mich, ob es auch einensparse array
Typ geben könnte und ob es Pläne dafür gibt. Irgendwelche Hinweise?https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.matrix.A1.html
quelle
hängt davon ab, was du mit Eleganz meinst, aber das würde ich tun
quelle
Sie können die folgende Variante ausprobieren:
quelle
Wenn Sie Wert auf Geschwindigkeit legen; Aber wenn Sie sich für das Gedächtnis interessieren:
quelle
Oder Sie könnten versuchen, einige Zeit mit zu vermeiden
quelle
Erstens,
Mv = numpy.asarray(M.T)
was Ihnen ein 4x1 aber 2D-Array gibt.Dann führen
A = Mv[0,:]
, was gibt Ihnen , was Sie wollen. Sie könnten sie zusammensetzen, alsnumpy.asarray(M.T)[0,:]
.quelle
Dadurch wird die Matrix in ein Array konvertiert
quelle
Die Funktionen ravel () und flatten () von numpy sind zwei Techniken, die ich hier ausprobieren würde. Ich möchte die Beiträge von Joe , Siraj , Bubble und Kevad ergänzen .
Ravel:
Ebnen:
numpy.ravel()
ist schneller , da es sich um eine Funktion auf Bibliotheksebene handelt, die keine Kopie des Arrays erstellt. Jedoch wird jede Änderung in Array A sich auf die ursprüngliche Anordnung M tragen über , wenn Sie verwendennumpy.ravel()
.numpy.flatten()
ist langsamer alsnumpy.ravel()
. Wenn Sie jedochnumpy.flatten()
A erstellen, werden Änderungen in A nicht auf das ursprüngliche Array M übertragen .numpy.squeeze()
undM.reshape(-1)
sind langsamer alsnumpy.flatten()
undnumpy.ravel()
.quelle