So ordnen Sie ein 1D-numpy-Arrays zu 2D-numpy-array?
Betrachten Sie das folgende einfache Beispiel:
X = numpy.zeros([10, 4]) # 2D array
x = numpy.arange(0,10) # 1D array
X[:,0] = x # WORKS
X[:,0:1] = x # returns ERROR:
# ValueError: could not broadcast input array from shape (10) into shape (10,1)
X[:,0:1] = (x.reshape(-1, 1)) # WORKS
Kann mir jemand erklären, warum numpy hat Vektoren der Form (N,) statt (N,1) ?
Was ist der beste Weg, um das Gießen von 1D-array in 2D-array?
Warum brauche ich diese?
Weil ich habe einen code welcher Ergebnis x
in ein 2D-array X
und die Größe von x ändert sich von Zeit zu Zeit, so habe ich X[:, idx1:idx2] = x
die funktioniert, wenn x
ist der 2D-auch, aber nicht wenn x 1D.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Tun, die Sie wirklich brauchen, um in der Lage zu behandeln, sowohl 1D-und 2D-Eingänge mit der gleichen Funktion? Wenn Sie wissen, die Eingabe wird 1D, verwenden Sie
Wenn Sie wissen, die Eingabe wird 2D, verwenden Sie
Wenn Sie nicht wissen, die Eingabe-Abmessungen, ich empfehle das Umschalten zwischen einer Zeile oder die andere mit einem
if
, obwohl es vielleicht einige Indizierung trick, den ich bin mir nicht bewusst, dass das handhaben würde, beide identisch.Ihre
x
Form(N,)
eher als Form(N, 1)
(oder(1, N)
), weil numpy basiert nicht nur für matrix-Mathematik. ndarrays sind n-dimensional; Sie unterstützen eine effiziente, konsistente vektorisierte Operationen für jede nicht-negative Anzahl von Dimensionen (einschließlich der 0). Dies mag zwar gelegentlich matrix-Operationen, die ein bisschen weniger präzise (vor allem im Fall vondot
für die matrix-Multiplikation), produziert es mehr allgemein gültigen code für Ihre Daten ist natürlich 1-dimensionalen oder 3-, 4-, oder n-dimensional.Ich glaube, Sie haben die Antwort bereits in deiner Frage. Numpy ermöglicht die arrays beliebiger Dimensionalität (während afaik Matlab bevorzugt zwei Dimensionen, wo möglich), so dass Sie brauchen, um richtig zu sein mit diesem (und immer unterscheiden zwischen (n,) und (n,1)). Durch Angabe einer Anzahl als einer der Indizes (wie die 0 in der 3. Reihe), Sie reduzieren die Dimensionalität um eins. Indem Sie einen Bereich als einen der Indizes (wie 0:1 in der 4. Zeile), die Sie nicht reduzieren die Dimensionalität.
Zeile 3 macht das vollkommen Sinn für mich, und ich würde, weisen die 2-D-array auf diese Weise.
Hier sind zwei tricks, die machen den code ein wenig kürzer.