Ein wesentlicher Unterschied besteht darin, dass in MATLAB alles hat mindestens 2 Dimensionen.
>> size(x(:,1))
ans =
2 1
und wie Sie beachten, erlaubt es die Indizierung 'beyond-the-end' - weit über
>> x(:,10)=x(:,1)
x =
1 2 3 1 0 0 0 0 0 1
4 5 6 4 0 0 0 0 0 4
Aber in numpy
Indizierung reduziert die Dimensionen, ohne die 2. Etage:
In [1675]: x = np.ones((3,4),int)
In [1676]: x.shape
Out[1676]: (3, 4)
In [1677]: x[:,0].shape
Out[1677]: (3,)
Das bedeutet, wenn ich eine Spalte replizieren möchte, muss ich sicherstellen, dass es immer noch eine Spalte in der concatenate
ist. Dafür gibt es zahlreiche Möglichkeiten.
x[:,0][:,None]
- Verwendung von np.newaxis
(alias None
) ist eine schöne allgemeine Methode. x[:,[0]]
, x[:,0:1]
, x[:,0].reshape(-1,1)
haben auch ihren Platz.
append
ist nur concatenate
, die die Liste der Argumente mit 2 ersetzt. Es ist eine verwirrende Nachahmung der Liste append. Es ist Python geschrieben, so dass Sie es lesen können (wie erfahrene MATLAB-Programmierer tun).
insert
ist eine kompliziertere Funktion (auch in Python). Hinzufügen am Ende tut es so etwas wie:
In [1687]: x.shape
Out[1687]: (3, 4)
In [1688]: res=np.empty((3,5),int)
In [1689]: res[:,:4] = x
In [1690]: res[:,-1] = x[:,0]
Die letzte Zuordnung funktioniert, weil beide Seiten die gleiche Form haben (technisch sie müssen nur sende Formen sein). So sagt uns insert
nichts darüber, was sollte in grundlegenden Operationen wie concatenate
funktionieren.