Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

New to MATLAB?

Can you help with logic behnid this problem ? Iterations

Asked by Priya

Priya (view profile)

on 26 May 2013

I have a cell array as follows:

no. of columns = 3 and no. of rows = 800
First Column - Serial No
Second Column - Character
Third Column - Number
cell = {1  'N'  1.2 ; 2  'B' 3.2 ; 3 'D' 5.3 ; 1  'N'  1.2 ; 2  'A' 3.2 ; 3 'G' 5.3 ; 1  'E'  1.2 ; 2  'F' 3.2 ; 3 'G' 5.3 ; 1  'N'  1.2 ; 2  'C' 3.2 ; 3 'D' 5.3 ; 1 'H' 1.2 ; 2 'B' 3.2 ; 3 'D' 5.3 ; 1 'N' 1.2 ; 2 'B' 3.2 ; 3 'E' 5.3 ....................}

In second column character 'N' repeats after certain entries (rows).

I want to add the numbers in third coulmn from the row with 'N' in second column till the rows before next 'N' appears in second row.

2 Comments

Azzi Abdelmalek

Azzi Abdelmalek (view profile)

on 26 May 2013

What should be the result?

Jan Simon

Jan Simon (view profile)

on 26 May 2013

"cell" is an important Matlab command. Using this term as a name of a variable shadows the built-in function and this causes troubles frequently.

Priya

Priya (view profile)

Products

No products are associated with this question.

1 Answer

Answer by Azzi Abdelmalek

Azzi Abdelmalek (view profile)

on 26 May 2013
idx1=find(cellfun(@(x) isequal(x,'N'),cell(:,2)));
idx2=[idx1(2:end)-1; size(cell,1)];
for k=1:numel(idx1)
  h{k}=cellfun(@(x) x+cell{idx1(k),3},cell(idx1(k):idx2(k),3));
end
h=cell2mat(h');
cell(:,3)=num2cell(h(:));

1 Comment

Jan Simon

Jan Simon (view profile)

on 26 May 2013

What about this for getting idx1:

idx1 = find(strcmp(c(:, 2), 'N'));
Azzi Abdelmalek

Azzi Abdelmalek (view profile)

Contact us