Angenommen, ich habe ein Array a
:
a = np.array([[1,2,3], [4,5,6]])
array([[1, 2, 3],
[4, 5, 6]])
Ich möchte es in ein 1D-Array (dh einen Spaltenvektor) konvertieren:
b = np.reshape(a, (1,np.product(a.shape)))
aber das kehrt zurück
array([[1, 2, 3, 4, 5, 6]])
Das ist nicht dasselbe wie:
array([1, 2, 3, 4, 5, 6])
Ich kann das erste Element dieses Arrays verwenden, um es manuell in ein 1D-Array zu konvertieren:
b = np.reshape(a, (1,np.product(a.shape)))[0]
Dazu muss ich jedoch wissen, wie viele Dimensionen das ursprüngliche Array hat (und [0] verketten, wenn ich mit höheren Dimensionen arbeite).
Gibt es eine dimensionsunabhängige Möglichkeit, einen Spalten- / Zeilenvektor von einem beliebigen ndarray abzurufen?
ravel()
eine Ansicht zurück, dies ist jedoch nicht immer der Fall. Es gibt Fälle, in denenravel()
eine Kopie zurückgegeben wird. </ Pedantic>a.ravel()
sieht ungefähr dreimal so schnell aus wiea.reshape(-1)
.a.flatten()
ist viel langsamer, da es eine Kopie machen muss.oder einfach:
quelle
b = a.reshape(-1)
kurz in erstem Beispiel.Eine der einfachsten Möglichkeiten ist die Verwendung
flatten()
wie in diesem Beispiel:Mein Array war so:
Nach der Verwendung
flatten()
:Es ist auch die Lösung von Fehlern dieser Art:
quelle
Für eine Liste von Arrays mit unterschiedlicher Größe verwenden Sie Folgendes:
Ausgabe:
[1 2 3 4 5 6 7 8]
quelle
a
Rückens bekommenb
?Ich wollte ein Benchmark-Ergebnis von Funktionen sehen, die in Antworten erwähnt wurden, einschließlich Unutbu's .
Ich möchte auch darauf hinweisen, dass numpy doc die Verwendung empfiehlt,
arr.reshape(-1)
falls die Ansicht vorzuziehen ist. (obwohlravel
es im folgenden Ergebnis etwas schneller ist)Benchmark
Funktionen:
np.ravel
: gibt nach Möglichkeit die Ansicht zurücknp.reshape(-1)
: gibt nach Möglichkeit die Ansicht zurücknp.flatten
: gibt eine Kopie zurücknp.flat
: kehrt zurücknumpy.flatiter
. ähnlich zuiterable
numpy version: '1.18.0'
Ausführungszeiten auf verschiedenen
ndarray
GrößenFazit
Verwendeter Code
quelle
Obwohl dies nicht das np-Array-Format verwendet (zu faul, um meinen Code zu ändern), sollte dies tun, was Sie wollen ... Wenn Sie wirklich einen Spaltenvektor wollen, möchten Sie das Vektorergebnis transponieren. Es hängt alles davon ab, wie Sie dies verwenden möchten.
Wenn Sie also transponieren müssen, können Sie Folgendes tun:
quelle