Manipolation of Cell Arrays.

I have {A}=<250x22>cell. thanks to another question I'm able to know the pairs of two colums of {A} for example I have just these three combination :{a}&{b} or {b}&{z} or {r}&{t}. What I would like to create three different cell arrays based on the three combination.

 Réponse acceptée

Fangjun Jiang
Fangjun Jiang le 19 Déc 2011

1 vote

A={'a','b',1 2 3;
'a','b',3 4 5;
'b','z',3 4 5;
'b','z',4 5 6;
'r','t',5 6 7;
'r','t',6 7 8};
UniqComb={'a','b';'b','z';'r','t'};
N=size(UniqComb,1);
Groups=cell(N,1);
for k=1:N
index=and(strcmp(A(:,1),UniqComb(k,1)),strcmp(A(:,2),UniqComb(k,2)));
Groups{k}=A(index,:);
end
>> Groups{1}
Groups{2}
Groups{3}
ans =
'a' 'b' [1] [2] [3]
'a' 'b' [3] [4] [5]
ans =
'b' 'z' [3] [4] [5]
'b' 'z' [4] [5] [6]
ans =
'r' 't' [5] [6] [7]
'r' 't' [6] [7] [8]

8 commentaires

Maurizio
Maurizio le 19 Déc 2011
Fangjun I have 250x22cell. The combination are only for the two colums. What I would like to do is to create based on these three configuration 3 cell array indipendent where on each cell array there are only the data of the correct configuration
Fangjun Jiang
Fangjun Jiang le 19 Déc 2011
That is what the code is for. All the data in Groups{1} will have first column as 'a' and second column as 'b'. All the data in Groups{2} will have first column as 'b' and second column as 'z'. And etc.
Maurizio
Maurizio le 19 Déc 2011
may be I'm not able to explain.
I analyse the colums 2 and 3 of {A} ({A}=250x22 cell) and I have three different combination of these 250 rows.
The combination on all the 250 rows (on the two colums) are 'a' with 'b' or 'b' with 'z' or 'r' with 't'. What I would like to do is read all the 250 rows and create three different structure based on the three configuaration..Example
first combination 240 times.
second combination 5 times.
third combiantion 5 times.
The combination can be in disorder.
What I like to do is create 3 different structure each one with all
the colums (22) of the correct combination and with the example above will be for example is 240x20 cell, 5x20 cell and 5x20cell.
Fangjun Jiang
Fangjun Jiang le 19 Déc 2011
Besides the column 1,2 and column 2,3 difference, that is the exact code. Why don't you try it on your data set A?
Fangjun Jiang
Fangjun Jiang le 19 Déc 2011
See update with an example.
Walter Roberson
Walter Roberson le 19 Déc 2011
I'm not certain but possibly Maurizio would like the order to be irrelevant; i.e., to also allow 'b' 'a', 'z' 'b' and 't' 'r'
Maurizio
Maurizio le 20 Déc 2011
@ Fangjun... is it possible to create a for loop that for each Groups{} sum all the number that I have only on the column 3 and 4?
Fangjun Jiang
Fangjun Jiang le 20 Déc 2011
>> sum([Groups{k}{:,3}])
ans =
11

Connectez-vous pour commenter.

Plus de réponses (1)

Walter Roberson
Walter Roberson le 19 Déc 2011

0 votes

a_1 = strcmp('a', A(:,1));
b_1 = strcmp('b', A(:,1));
b_2 = strcmp('b', A(:,2));
r_1 = strcmp('r', A(:,1));
t_2 = strcmp('t', A(:,2));
mab = A(a_1 & b_2, :);
mbz = A(b_1 & z_2, :);
mrt = A(r_1 & t_2, :);

2 commentaires

Fangjun Jiang
Fangjun Jiang le 19 Déc 2011
Walter, what about http://matlab.wikia.com/wiki/FAQ#How_can_I_create_variables_A1.2C_A2.2C....2CA10_in_a_loop.3F ?
Walter Roberson
Walter Roberson le 19 Déc 2011
No loop variables were harmed in the making of this code snippet.

Connectez-vous pour commenter.

Catégories

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by