2016-02-15 19 views
6

Ich möchte einige Spalten und Zeilen aus einer großen Matrix entfernen. Dies sind die Spalten und die Zeilen, die alle Nullen enthalten. Gibt es eine Funktion in MATLAB, die das für Sie schnell erledigt? Meine Matrizen sind spärlich. Ich tue so:Entfernen Sie Nullen Spalte und Zeilen aus einer Matrix Matlab

% To remove all zero columns from A 
ind = find(sum(A,1)==0) ; 
A(:,ind) = [] ; 

% To remove all zeros rows from A 
ind = find(sum(A,2)==0) ; 
A(ind,:) = [] ; 

Es wäre schön, eine einzige Zeile Code dafür zu haben, wie ich immer wieder diese Art von Aufgabe tun kann. Dank

+1

Ihr Code sieht gut aus. Wenn Ihre Matrizen spärlich sind, kann es jedoch schneller sein, wenn Sie die Nicht-Null-Elemente kopieren (weiß nicht, nur eine Vermutung): 'B = A (~ ind, :)'. –

+0

Mögliches Duplikat von [Entfernen von Nullen aus einer Matrix - Nicht sparsam] (http://stackoverflow.com/questions/738438/removing-zeros-from-a-matrix-not-sparse) – GameOfThrows

+1

Verwenden von 'all (A, 1) 'oder' all (A, 2) 'könnte schneller sein als' sum (A, 1) ', aber ich habe es nicht überprüft. – Max

Antwort

7

Eine einzige Zeile Code wäre:

A=A(any(X,2),any(X,1)) 

Es besteht keine Notwendigkeit find zu verwenden ist wie Sie haben, können Sie direkt Index logische Vektoren.

+0

Nur erstaunlich, perfekte Antwort auf meine Fragen in Anbetracht all der Kommentare, die die Leute mir gegeben haben. Daniel du Regel! – Yas

Verwandte Themen