Con riferimento al secondo esempio nella risposta precedente, se il tuo cellarray colone diverse possono avere un numero diverso di elementi vuoti, eliminando gli elementi vuoti otterresti un cellarray nel quale:
[*] la prima colonna contiene 5 righe
[*] la seconda colonna contiene 4 righe
[*] la terza colonna contiene 3 righe
A =
[4x2 double] [4x2 double] [4x2 double]
[4x2 double] [4x2 double] [4x2 double]
[4x2 double] [4x2 double] [4x2 double]
[4x2 double] [4x2 double]
[4x2 double]
Purtroppo questo non è possibile.
In un cellarray (come in una matrice), tutte le righe devono avere lo stesso numero di colonne e viceversa (tutte le colonne devono avere lo stesso numero di righe).
Tra l'altro, guardando il codice che hai inserito, il primo loop (indice "S") è basato sul numero delle righe del cellarray:
S=size(X,1);
[...]
for i=1:S
ma se le diverse colonne hanno un numero diverso di righe, il valore di "S" non sarà lo steso per tutte le colonne, per cui devi, comunque, modificare l'algoritmo che hai implementato.
Dal momento che, come hai scritto, non conosci in anticipo il numero di elementi vuoti, quello che puoi fare è, per esempio, creare una struttura con tanti campi quante sono le colonne del cellarray ed assegnare ad ogni campo un cellarray che contenga gli elementi non vuoti di una determinata colonna.
Lavorando con le strutture, puoi creare dinamicamente i vari campi in questo puoi scrivere un codice che funzioni indipendentemente dal numero di colonne.
Data una struttura "my_struct" puoi creare, per esempio in un loop, tre campi di nome "field_1", "field_2" e "field_3", come nel codice che segue (a titolo di esempio, ad ogni campo viene assegnato anche un valore)
for i=1:3
my_struct.(['field_' num2str(i)])=i*100
end
che crea, appunto, la struttura:
>> my_struct
my_struct =
field_1: 100
field_2: 200
field_3: 300
Di seguito l'implementazione dell'esempio nel caso del tuo cellarray:
% Definizione di un cellarray di esempio
A={rand(4,2), rand(4,2), [];
[], rand(4,2), rand(4,2);
rand(4,2), [], [];
rand(4,2), [], rand(4,2);
rand(4,2), rand(4,2), rand(4,2);
rand(4,2), rand(4,2), []}
% Identificazione degli indici posizione dei vettori non vuoti all'interno
% del cellarray
idx=~cellfun(@isempty,A)
% Identificazion del numero di righe con elementi non vuoti per ogni
% colonna del cellarray Identificazione del numero di colonne del cellarray
n_row=sum(idx);
% Identificazione del numero di colonne del cellarray
A_col=size(A,2);
% Loop sulle colonne del cellarray per estrarre i vettori non vuoti
% Gli elementi non vuoti di ogni colonna del cellarrray (classi) vengono
% assegnsati ad una struttura
% Ogni campo della struttura corrisponde ad una colonna del cellarray
for i=1:A_col
classi.(['colonna_' num2str(i)])=A(idx(:,i),i);
end
classi
classi.colonna_1
classi.colonna_2
classi.colonna_3
che genera la struttura "classi" con i tre campi: "colonna_1", "colonna_2" e "colonna_3":
classi =
colonna_1: {5x1 cell}
colonna_2: {4x1 cell}
colonna_3: {3x1 cell}
ans =
[4x2 double]
[4x2 double]
[4x2 double]
[4x2 double]
[4x2 double]
ans =
[4x2 double]
[4x2 double]
[4x2 double]
[4x2 double]
ans =
[4x2 double]
[4x2 double]
[4x2 double]
Hope this helps.