wake-up-neo.com

Konvertieren Sie ein 1D-Array in ein 2D-Array in Numpy

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.)

86
Alex Williams

Sie möchten reshape das Array.

B = np.reshape(A, (-1, 2))
124
Matt Ball

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)
38
Pierre GM

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.

5
JoshAdel