2013-03-14 15 views
7

Come rimuovere efficacemente più righe e colonne da una matrice in Matlab? Un vettore contiene indici che dovrebbero essere rimossi.Rimozione di righe e colonne dalla matrice in Matlab

ingresso: t dalla matrice t

uscita: (t-k) di matrice (t-k) in cui k righe non adiacenti e colonne corrispondenti vengono rimossi dalla matrice di ingresso.

risposta

16

Questo dovrebbe risolvere il tuo problema.

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

Al secondo pensiero, se si dispone di indici, allora prima convertire tali indici a pedice utilizzando la funzione ind2sub come:

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

Ora si otterrà riga e gli indici di colonna di elementi che necessitano di essere rimosso. I singoli elementi non possono essere rimossi da una matrice. Quindi presumo che sia necessario rimuovere l'intera colonna e riga. Ciò può essere fatto come:

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

Se si desidera rimuovere i singoli elementi quindi utilizzare un array di celle o sostituire questi elementi con un certo valore obsolete quali 9999.

+0

Supponiamo che se entro in un certo numero dico 5, voglio rimuovere la '5a riga' e la' 5a colonna' da 'matrix', puoi suggerire un qualsiasi' codice a riga singola 'per farlo? – noufal

+0

Ho una matrice molto grande e non riesco a copiare la mia matrice per rimuovere alcune parti di essa, ho bisogno di usare i dati e cancellare i dati che uso e creare un'altra matrice da quello spazio, come dovrei farlo? – Ehsan

+0

@Ehsan Perché hai bisogno di fare la sua seconda copia? Questo dovrebbe funzionare: 'matrix (rows2remove,:) = []; matrice (:, cols2remove) = []; ' –

Problemi correlati