numpy.shape gibt inkonsistente Antworten - warum?
Warum funktioniert das Programm
import numpy as np
c = np.array([1,2])
print(c.shape)
d = np.array([[1],[2]]).transpose()
print(d.shape)
geben
(2,)
(1,2)
als Ausgabe? Sollte es nicht
(1,2)
(1,2)
statt? Ich hab das in beiden python 2.7.3 und python 3.2.3
InformationsquelleAutor der Frage user1710403 | 2012-09-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim aufrufen des
.shape
Attribut einesndarray
Sie erhalten ein Tupel mit so viele Elemente wie Dimensionen des Arrays. Die Länge, dh, die Anzahl der Zeilen, ist die erste dimension (shape[0]
)c=np.array([1,2])
. Das ist ein plain-1D-array, so dass seine Form ist eine 1-element-Tupel und -shape[0]
ist die Anzahl der Elemente, soc.shape = (2,)
c=np.array([[1,2]])
. Das ist ein 2D-array mit 1 Zeile. Die erste und einzige Zeile[1,2]
das uns beiden Spalten. Daherc.shape=(1,2)
undlen(c)=1
c=np.array([[1,],[2,]])
. Ein weiteres 2D-array mit 2 Zeilen, 1 Spalte:c.shape=(2,1)
undlen(c)=2
.d=np.array([[1,],[2,]]).transpose()
: dieses array ist die gleiche wienp.array([[1,2]])
daher ist seine Form(1,2)
.Ein weiteres nützliches Attribut ist
.size
: das ist die Anzahl der Elemente in allen Dimensionen, und Sie haben bei einer array -c
c.size = np.product(c.shape)
.Mehr Informationen über die Form in der Dokumentation.
InformationsquelleAutor der Antwort Pierre GM
len(c.shape)
ist die "Tiefe" des Arrays.Für
c
das array ist nur eine Liste (Vektor), ist die Tiefe 1.Für
d
, das array ist eine Liste von Listen, die Tiefe ist 2.Hinweis:
ist nicht
d
so ist dieses Verhalten nicht im Widerspruch.InformationsquelleAutor der Antwort Andy Hayden
transpose
ändert sich nicht die Anzahl der Dimensionen des Arrays. Wennc.ndim == 1
c.transpose() == c
. Versuchen:InformationsquelleAutor der Antwort Bi Rico
Schnelle Lösung: überprüfen Sie die .ndim-Eigenschaft - wenn Sie die 2, dann die .shape-Eigenschaft funktioniert wie Sie es erwarten.
Grund, Warum: wenn die .ndim-Eigenschaft 2 ist, dann numpy berichtet von einem shape-Wert, stimmt mit dem übereinkommen. Wenn die .ndim-Eigenschaft ist 1, dann numpy nur Berichte, die Form in einer anderen Weise.
Mehr sprechen: Wenn Sie pass np.array a von Listen von Listen, die .shape-Eigenschaft einverstanden mit standard-Vorstellungen von den Dimensionen der matrix: (Zeilen, Spalten).
Wenn Sie pass np.array nur eine Liste, dann numpy nicht denke, dass es eine matrix auf Ihre Hände, und Berichte die Form in einer anderen Weise.
Die Frage ist: hat numpy denke, es ist eine matrix, oder denkt es es hat etwas anderes auf seine Hände.
InformationsquelleAutor der Antwort S French