2016-02-15 15 views
6

Vorrei rimuovere alcune colonne e righe da una matrice grande. Quelle sono le colonne e le righe che hanno tutti i valori di zeri. C'è qualche funzione in MATLAB che può farlo per te abbastanza velocemente? Le mie matrici sono rare. Sto facendo in questo modo:Rimuovere le colonne di zeri e le righe da una matrice 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,:) = [] ; 

Sarebbe bello avere una riga di codice per questo come io possa fare questo tipo di operazione più volte. Grazie

+1

Il tuo codice sembra buono. Se le tue matrici sono sparse, potrebbe essere più veloce quando copi gli elementi diversi da zero (non lo so, solo un'ipotesi): 'B = A (~ ind, :)'. –

+0

Possibile duplicato di [Eliminazione di zeri da una matrice - Non sparse] (http://stackoverflow.com/questions/738438/removing-zeros-from-a-matrix-not-sparse) – GameOfThrows

+1

utilizzando 'all (A, 1) 'o' all (A, 2) 'potrebbe essere più veloce di' sum (A, 1) ', ma non ho controllato. – Max

risposta

7

una sola riga di codice sarebbe:

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

Non v'è alcuna necessità di utilizzare find come hai fatto, si può direttamente indice utilizzando vettori logici.

+0

Semplicemente fantastico, risposta perfetta per le mie domande considerando tutti i commenti che mi hanno dato le persone. Daniele Regola! – Yas