[MATLAB] Eliminare colonna da matrice 3D

MadHarvey
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 :)

Risposte
elgiovo
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],:)

MadHarvey
Intanto grazie mille perchè mi avete risolto gran parte dei problemi :D
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

MadHarvey
Intanto grazie mille perchè mi avete risolto gran parte dei problemi :D
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

elgiovo
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ì:


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,:);


MadHarvey
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 ;)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.