Sie können Schleifen dank der reshape()
Funktion, die (wie der Name schon sagt) ein Array umformen. In Ihrem Fall können Sie tun:
p=reshape(p,3,[])';
um
p =
1 2 3
4 5 6
7 8 9
10 11 12
Die reshape Funktion als erste Eingabe nimmt zu bekommen das Array, das Sie neu zu gestalten wollen (p
) wie die folgenden Argumente die Dimensionen sind . Allerdings funktioniert reshape()
funktioniert das Füllen der neu gestalteten Array von Spalten, während in Ihrem Fall Sie wollen, dass es durch Zeilen gefüllt. Also formulieren wir zunächst das Array mit 3 Zeilen (zweites Argument) und lassen Matlab die Anzahl der Spalten entsprechend auswerten (drittes, leer, Argument). Später transponieren wir ('
) das Ergebnis, um die endgültige Matrix zu erhalten.
Wenn jedoch aus irgendwelchen Gründen Sie Loops verwenden müssen, eine einfache Lösung sein kann:
nc=3; % set the number of columns as 3
nr=numel(p)/nc; % evaluate the number of rows
k=1; % this index will scan vector p
for i=1:nr % in Matlab indices start at 1, not 0
for j=1:nc
x(i,j)=p(k); % fill element (i,j) with the k-th element from p
k=k+1; % keep scanning p
end
end
Eine letzte Anmerkung: in Matlab können Sie nicht speichern 3 Elemente in einem einzigen Matrixelement. Obwohl Sie eine ganze Reihe füllen können, wie ich oben getan habe, und dann, um das Triplet (x, y, z) zu bekommen, können Sie die ganze Reihe lesen. Um eine ganze Zeile aus der Matrix X
zu lesen, können Sie die Syntax X(i,:)
verwenden, wobei i
der Zeilenindex ist: Dieser Befehl gibt einen Vektor zurück, das ist die Matrixzeile.
Wenn Sie einen Vektor in einem einzelnen Element haben möchten, müssen Sie Zellenarrays und nicht reguläre Matrizen verwenden.
Mehrere Kommentare: (1) Arrays/Matrizen in Matlab können nur primitive Typen enthalten (zB Standard ist ein Doppel) (2 Matrix) (3) das erste Element in einem Array in Matlab hat einen Index von 1, nicht 0 –