Das Kriterium für die Bereitstellung der neuen Form lautet: "Die neue Form sollte mit der ursprünglichen Form kompatibel sein."
Mit numpy können wir einen der neuen Formparameter als -1 angeben (z. B. (2, -1) oder (-1,3), aber nicht (-1, -1)). Es bedeutet einfach, dass es eine unbekannte Dimension ist und wir möchten, dass Numpy es herausfindet. Und numpy wird dies herausfinden, indem es die 'Länge des Arrays und die verbleibenden Dimensionen' betrachtet und sicherstellt, dass es die oben genannten Kriterien erfüllt
Nun sehen Sie sich das Beispiel an.
z = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
z.shape
(3, 4)
Versuchen Sie nun, mit (-1) umzuformen. Ergebnis neue Form ist (12,) und ist kompatibel mit ursprünglicher Form (3,4)
z.reshape(-1)
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
Versuchen Sie nun, sich mit (-1, 1) neu zu formen. Wir haben Spalte als 1, aber Zeilen als unbekannt angegeben. So erhalten wir eine neue Form als (12, 1) .wieder kompatibel mit der ursprünglichen Form (3,4)
z.reshape(-1,1)
array([[ 1],
[ 2],
[ 3],
[ 4],
[ 5],
[ 6],
[ 7],
[ 8],
[ 9],
[10],
[11],
[12]])
Das Obige steht im Einklang mit numpy
Ratschlägen / Fehlermeldungen, die reshape(-1,1)
für eine einzelne Funktion verwendet werden sollen. dh einzelne Spalte
Ändern Sie Ihre Daten mithilfe von, array.reshape(-1, 1)
wenn Ihre Daten nur über eine einzige Funktion verfügen
Neue Form als (-1, 2). Zeile unbekannt, Spalte 2. Wir erhalten Ergebnis neue Form als (6, 2)
z.reshape(-1, 2)
array([[ 1, 2],
[ 3, 4],
[ 5, 6],
[ 7, 8],
[ 9, 10],
[11, 12]])
Versuchen Sie nun, die Spalte als unbekannt zu halten. Neue Form als (1, -1). dh Zeile ist 1, Spalte unbekannt. wir erhalten Ergebnis neue Form als (1, 12)
z.reshape(1,-1)
array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]])
Das Obige steht im Einklang mit numpy
Ratschlägen / Fehlermeldungen, die reshape(1,-1)
für eine einzelne Stichprobe verwendet werden sollen. dh einzelne Reihe
Formen Sie Ihre Daten neu, indem Sie array.reshape(1, -1)
sie verwenden, wenn sie ein einzelnes Beispiel enthalten
Neue Form (2, -1). Zeile 2, Spalte unbekannt. wir erhalten Ergebnis neue Form als (2,6)
z.reshape(2, -1)
array([[ 1, 2, 3, 4, 5, 6],
[ 7, 8, 9, 10, 11, 12]])
Neue Form als (3, -1). Zeile 3, Spalte unbekannt. wir erhalten Ergebnis neue Form als (3,4)
z.reshape(3, -1)
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
Und schließlich, wenn wir versuchen, beide Dimensionen als unbekannt bereitzustellen, dh eine neue Form wie (-1, -1). Es wird ein Fehler ausgegeben
z.reshape(-1, -1)
ValueError: can only specify one unknown dimension
reshape
, um die gleiche Anzahl von Elementen beizubehalten.Wird zum Umformen eines Arrays verwendet.
Angenommen, wir haben eine dreidimensionale Anordnung von Dimensionen 2 x 10 x 10:
Jetzt wollen wir uns auf 5 x 5 x 8 umformen:
wird den Job machen.
Beachten Sie, dass Sie nach dem Festlegen des ersten Dim = 5 und des zweiten Dim = 5 die dritte Dimension nicht mehr bestimmen müssen. Um Ihre Faulheit zu unterstützen, bietet Python die Option -1:
gibt Ihnen ein Array von Form = (5, 5, 8).
Gleichfalls,
gibt Ihnen eine Reihe von Formen = (50, 4)
Sie können mehr unter http://anie.me/numpy-reshape-transpose-theano-dimshuffle/ lesen.
quelle
Nach
the documentation
:quelle
[8]
weil die Dokumentation dies sagt (1-D array
). Versuchen Sie esnumpy.reshape(a, [8])
. Es ergibt das gleiche Ergebnis mitnumpy.reshape(a, [1,8])
für die Matrix.numpy.reshape (a, newshape, order {}) Weitere Informationen finden Sie unter dem folgenden Link. https://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html
Für das folgende Beispiel, das Sie erwähnt haben, erklärt die Ausgabe, dass der resultierende Vektor eine einzelne Zeile ist. (- 1) gibt die Anzahl der Zeilen an, die 1 sein sollen
Ausgabe:
Matrix ([[1, 2, 3, 4, 5, 6, 7, 8]])
Dies kann mit einem anderen Beispiel genauer erklärt werden:
Ausgabe: (ist ein eindimensionales Spaltenarray)
Array ([[0],
b = np.arange (10) .reshape ((1, -1))
Ausgabe: (ist ein eindimensionales Zeilenarray)
Array ([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
quelle
Es ist ziemlich leicht zu verstehen. Das "-1" steht für "unbekannte Dimension", die aus einer anderen Dimension abgeleitet werden sollte. In diesem Fall, wenn Sie Ihre Matrix wie folgt einstellen:
Ändern Sie Ihre Matrix wie folgt:
Es werden einige taube Operationen an die Matrix a aufgerufen, die ein 1-d-Numpy-Array / Martrix zurückgibt.
Ich halte es jedoch nicht für eine gute Idee, solchen Code zu verwenden. Warum nicht versuchen:
Sie erhalten das gleiche Ergebnis und es ist für die Leser klarer zu verstehen: Setzen Sie b als eine andere Form von a. Für a wissen wir nicht, wie viele Spalten es haben soll (setzen Sie es auf -1!), Aber wir wollen ein 1-dimensionales Array (setzen Sie den ersten Parameter auf 1!).
quelle
Lange Rede, kurzer Sinn: Sie legen einige Dimensionen fest und lassen NumPy die verbleibenden Dimensionen festlegen.
quelle
Es bedeutet einfach, dass Sie nicht sicher sind, wie viele Zeilen oder Spalten Sie angeben können, und dass Sie numpy bitten, die Anzahl der Spalten oder Zeilen vorzuschlagen, in die umgeformt werden soll.
numpy bietet das letzte Beispiel für -1 https://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html
Überprüfen Sie den folgenden Code und seine Ausgabe, um (-1) besser zu verstehen:
CODE:-
AUSGABE :-
quelle
quelle
Das Endergebnis der Konvertierung ist, dass die Anzahl der Elemente im endgültigen Array mit der des ursprünglichen Arrays oder Datenrahmens übereinstimmt.
-1 entspricht der unbekannten Anzahl der Zeilen oder Spalten. wir können es uns als
x
(unbekannt) vorstellen.x
wird erhalten, indem die Anzahl der Elemente im ursprünglichen Array durch den anderen Wert des geordneten Paares mit -1 geteilt wird.Beispiele
12 Elemente mit Umformung (-1,1) entsprechen einem Array mit
x
= 12/1 = 12 Zeilen und 1 Spalte.12 Elemente mit Umformung (1, -1) entsprechen einem Array mit 1 Zeile und
x
= 12/1 = 12 Spalten.quelle