18 Stimmen

Anhängen eines Vektors an eine leere MATLAB-Matrix

Ich habe MATLAB-Code, der n-dimensionale Punkte (n >1) in eine Matrix einfügt ( myPointMatrix ) und überlege gerade, wie ich den ersten Punkt einfügen soll.

Momentan prüft das Programm die Größe von myPointMatrix bevor Sie einen Punkt einfügen. Wenn er 1x1 ist, myPointMatrix wird gleich dem aktuellen Punkt gesetzt. Andernfalls wird der aktuelle Punkt angehängt. Diese if -Aussage ist nur einmal wahr, wird aber jedes Mal ausgewertet, wenn ich einen Punkt einfüge, was sehr, sehr oft der Fall ist.

Das Entfernen der if und versucht, an myPointMatrix führt dazu, dass MATLAB sich verständlicherweise darüber beschwert, dass die Matrixdimensionen nicht konsistent sind. Das Entfernen der beiden if -Statement und die Inialisierung von myPointMatrix = 0 veranlasst MATLAB zur Suche nach myPointMatrix undefiniert. Auch verständlich.

Wie initialisiere ich myPointMatrix so dass ich die if -Stellungnahme? Oder gibt es eine andere intelligente Lösung?

myPointMatrix = 0;
for x=0:limit
    for y=0:limit
        for z=0:limit
            tempPoint = [x y z];
            if (length(myPointMatrix) == 1)
                myPointMatrix = tempPoint;
            else
                myPointMatrix = [myPointMatrix; tempPoint];
            end
        end
    end
end

0voto

Das brauchen Sie

myPointMatrix=[];
for x=0:limit
for y=0:limit
for x=0:limit
  myPointMatrix(:,end+1)=[x y z];
end
end
end

aber nur für den Fall, dass Sie eine nichtlineare Operation mit [ x y z ] durchführen, bevor Sie sie zuweisen. Wenn nicht, können Sie die obigen Zeilen wie folgt schreiben:

myPointMatrix=[];
myPointMatrix(1,:)=kron([1:limit],ones(1,limit^2));
myPointMatrix(2,:)=kron([1:limit^2],ones(1,limit));
myPointMatrix(3,:)=kron(ones(1,limit^2),[1:limit]);

Das obige Beispiel ist vollständig vektorisiert, obwohl man vielleicht edit kron.m und ersetzen einige find con logical ... aber das können Sie wohl selbst tun... :D

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X