[MATLAB] Eliminare colonna da matrice 3D
Salve a tutti..ho un problema con la gestione di una matrice tridimensionale. In pratica devo eliminare una colonna da questa matrice (anche se in effetti non è proprio una colonna ma tipo un "foglio").
Ho questa matrice A = 50x90x70 devo togliere uno o piu elementi dei '90' quindi farla diventare una 50x89x70
Ho provato col comando [] ma mi da errore perche credo funzioni per matrici bidimensionali..
Come potrei fare?? Grazie a tutti
Ho questa matrice A = 50x90x70 devo togliere uno o piu elementi dei '90' quindi farla diventare una 50x89x70
Ho provato col comando [] ma mi da errore perche credo funzioni per matrici bidimensionali..
Come potrei fare?? Grazie a tutti

Risposte
A = A(:,1:end-1,:)
se vuoi togliere l'ultimo "foglio" dei 90.
Se ad esempio vuoi togliere il 47°
A = A(:,[1:46 48:end],:)
Intanto grazie mille perchè mi avete risolto gran parte dei problemi
Ora il problema è che dovrei poterne togliere piu di uno.In pratica siccome questo lavoro lo devo fare per piu matrici dove le colonne sono sempre diverse ho fatto in modo che la colonna sia una variabile che varia di volta in volta..Poi a volte capita che devo togliere piu colonne della stessa matrice e quindi ho pensato a un ciclo for che cicla per quanti sono i canali..il codice è questo
in questo modo fa il primo e ok,ritorna a fare il secondo ma ne toglie sempre uno e invece dovrebbe toglierne due

Ora il problema è che dovrei poterne togliere piu di uno.In pratica siccome questo lavoro lo devo fare per piu matrici dove le colonne sono sempre diverse ho fatto in modo che la colonna sia una variabile che varia di volta in volta..Poi a volte capita che devo togliere piu colonne della stessa matrice e quindi ho pensato a un ciclo for che cicla per quanti sono i canali..il codice è questo
colonna = [30 45]; colo = length(colonna); %che in questo caso vale 2 for i = 1:colo A=A(:,[1:colonna(i)-1 colonna(i)+1:end],:); end
in questo modo fa il primo e ok,ritorna a fare il secondo ma ne toglie sempre uno e invece dovrebbe toglierne due
Intanto grazie mille perchè mi avete risolto gran parte dei problemi
Ora il problema è che dovrei poterne togliere piu di uno.In pratica siccome questo lavoro lo devo fare per piu matrici dove le colonne sono sempre diverse ho fatto in modo che la colonna sia una variabile che varia di volta in volta..Poi a volte capita che devo togliere piu colonne della stessa matrice e quindi ho pensato a un ciclo for che cicla per quanti sono i canali..il codice è questo
in questo modo fa il primo e ok,ritorna a fare il secondo ma ne toglie sempre uno e invece dovrebbe toglierne due

Ora il problema è che dovrei poterne togliere piu di uno.In pratica siccome questo lavoro lo devo fare per piu matrici dove le colonne sono sempre diverse ho fatto in modo che la colonna sia una variabile che varia di volta in volta..Poi a volte capita che devo togliere piu colonne della stessa matrice e quindi ho pensato a un ciclo for che cicla per quanti sono i canali..il codice è questo
colonna = [30 45]; colo = length(colonna); %che in questo caso vale 2 for i = 1:colo A=A(:,[1:colonna(i)-1 colonna(i)+1:end],:); end
in questo modo fa il primo e ok,ritorna a fare il secondo ma ne toglie sempre uno e invece dovrebbe toglierne due
Occhio!
Se fai un ciclo for aggiornando A poi gli indici che vuoi togliere ti scalano all'indietro a ogni iterazione, rendendo il tutto assolutamente imprevedibile. Fai così:
Se fai un ciclo for aggiornando A poi gli indici che vuoi togliere ti scalano all'indietro a ogni iterazione, rendendo il tutto assolutamente imprevedibile. Fai così:
removeindexes = [1 7 64]; % vettore contentente gli indici da rimuovere keepindexes = 1:90; % vettore con gli indici da tenere keepindexes(removeindexes) = []; % togli gli indici da rimuovere da quelli da tenere A = A(:,keepindexes,:);
Grandissimo! funziona alla perfezione...in effetti nemmeno a me quadrava il ciclo..non riuscivo a capire bene la logica! grazie mille a tutti se volete potete chiudere
