Ich möchte ein eindimensionales Array in ein zweidimensionales Array umwandeln, indem ich die Anzahl der Spalten im 2D-Array spezifiziere. So etwas würde funktionieren:
> import numpy as np
> A = np.array([1,2,3,4,5,6])
> B = vec2matrix(A,ncol=2)
> B
array([[1, 2],
[3, 4],
[5, 6]])
Hat numpy eine Funktion, die wie meine erfundene Funktion "vec2matrix" funktioniert? (Ich verstehe, dass Sie ein 1D-Array wie ein 2D-Array indizieren können, aber das ist in meinem Code keine Option - ich muss diese Konvertierung vornehmen.)
Sie möchten reshape
das Array.
B = np.reshape(A, (-1, 2))
Sie haben zwei Möglichkeiten:
Wenn Sie die ursprüngliche Form nicht mehr benötigen, können Sie dem Array am einfachsten eine neue Form zuweisen
a.shape = (a.size//ncols, ncols)
Sie können das a.size//ncols
durch -1
, um die richtige Form automatisch zu berechnen. Stelle sicher das a.shape[0]*a.shape[1]=a.size
, sonst stößt du auf ein Problem.
Sie können ein neues Array mit dem np.reshape
Funktion, die meistens wie die oben vorgestellte Version funktioniert
new = np.reshape(a, (-1, ncols))
Wenn es möglich ist, ist new
nur eine Ansicht des anfänglichen Arrays a
, was bedeutet, dass die Daten gemeinsam genutzt werden. In einigen Fällen wird das Array new
stattdessen als Kopie verwendet. Beachten Sie, dass np.reshape
akzeptiert auch ein optionales Schlüsselwort order
, mit dem Sie von der C-Reihenfolge in der Zeile in die Fortran-Reihenfolge in der Spalte wechseln können. np.reshape
ist die Funktionsversion von a.reshape
Methode.
Wenn Sie die Anforderung nicht einhalten können a.shape[0]*a.shape[1]=a.size
, Sie müssen kein neues Array erstellen. Du kannst den ... benutzen np.resize
Funktionieren und mischen mit np.reshape
, sowie
>>> a =np.arange(9)
>>> np.resize(a, 10).reshape(5,2)
Versuchen Sie etwas wie:
B = np.reshape(A,(-1,ncols))
Sie müssen jedoch sicherstellen, dass Sie die Anzahl der Elemente in Ihrem Array durch ncols
teilen können. Sie können auch mit der Reihenfolge spielen, in der die Zahlen mit dem Schlüsselwort B
in order
gezogen werden.