7 Stimmen

Entfernen von Zeilen und Spalten aus einer Matrix in Matlab

Wie sollten wir effizient mehrere Zeilen und Spalten aus einer Matrix in Matlab entfernen? Ein Vektor hält die Indizes, die entfernt werden sollen.

Eingabe: t mal t Matrix

Ausgabe: (t-k) mal (t-k) Matrix, aus der k nicht benachbarte Zeilen und entsprechende Spalten aus der Eingabematrix entfernt wurden.

16voto

Autonomous Punkte 8625

Dies sollte Ihr Problem lösen.

matrix=randi(100,[50 50]);
rows2remove=[2 4 46 50 1];
cols2remove=[1 2 5 8 49];
matrix(rows2remove,:)=[];
matrix(:,cols2remove)=[];

Bei genauerer Überlegung, wenn Sie Indizes haben, konvertieren Sie diese Indizes zuerst in Positionen mit der Funktion ind2sub wie folgt:

[rows2remove,cols2remove] = ind2sub(size(matrix), VecOfIndices);

Jetzt haben Sie die Zeilen- und Spaltenindizes der Elemente, die entfernt werden müssen. Einzelne Elemente können nicht aus einer Matrix entfernt werden. Ich gehe also davon aus, dass Sie die gesamte Zeile und Spalte entfernen möchten. Das kann wie folgt gemacht werden:

rows2remove=unique(rows2remove);
cols2remove=unique(cols2remove);
matrix(rows2remove,:)=[];
matrix(:,cols2remove)=[];

Wenn Sie einzelne Elemente entfernen möchten, verwenden Sie entweder ein Zellarray oder ersetzen Sie diese Elemente durch einen veralteten Wert wie z.B. 9999.

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