1) Wenn Sie sagen arr2d[:, 0]
, sagen Sie mir geben Sie den 0. Index aller Zeilen in arr2d (das ist eine andere Art zu sagen, geben Sie mir die 0. Spalte).
2) Wenn Sie sagen arr2d[:, :1]
, Sie sagen, geben Sie mir alle :1
Index aller Zeilen in arr2d. Numpy interpretiert :1
genauso wie es 0:1
interpretieren würde. Sie sagen also "Geben Sie mir für jede Zeile den 0. bis zum ersten Index (exklusiv) jeder Zeile".Es stellt sich heraus, dass es nur der 0. Index ist, aber Sie haben ausdrücklich verlangt, dass die zweite Dimension die Länge eins hat (da 0:1
nur "Länge" ist).
So:
1)
print arr2d[:, 0].shape
Ausgang:
(3L,)
2)
print arr2d[:, 0:1].shape
Ausgang:
(3L, 1L)
Ich bekomme es immer noch nicht, warum geben sie nicht die gleiche Sache zurück?
Bedenken Sie:
print arr2d[:, 0:3]
print arr2d[:, 0:3].shape
print arr2d[:, 0:2]
print arr2d[:, 0:2].shape
print arr2d[:, 0:1]
print arr2d[:, 0:1].shape
Diese Ausgänge:
[[1 2 3]
[4 5 6]
[7 8 9]]
(3L, 3L)
[[1 2]
[4 5]
[7 8]]
(3L, 2L)
[[1]
[4]
[7]]
(3L, 1L)
Es wäre ein bisschen unerwartet und inkonsistent sein für die letzte Form (3L,)
zu sein.
Was ist der Unterschied zwischen der Zahl "1" und der Liste "[1]"? – Mephy
Es ist nicht klar, warum Sie dachten, sie würden gleich sein. Ein Segment einer Sequenz ist nicht dasselbe wie ein Objekt aus dieser Sequenz. – jonrsharpe
Der erste wählt einen Bereich von Spalten aus, also ändert er nicht die Nummer. von Dims, während der zweite eine Spalte auswählt und somit no reduziert. von Dims um "1". – Divakar