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

To resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

How to obtain the filtered Index of Cell Array

Asked by Kushan on 6 May 2013
% This is the code
AllNames= {'A.1';'A.1';'A.10';'A.10';'A.10';'A.10';'A.15';'A.15';'A.16'	;'A.17';'A.17';'A.17';'A.17';'A.17';'A.20A';'A.20A';'A.20A';'A.20A'};
B=[2;6;3;4;5;1;8;6;4;3;2;8;6;1;6;8;9;2];
ide_names=unique(AllNames(1:end,1)) ;
for i= 1:length(ide_names)
   index=find(AllNames(:,1)==ide_names(i,1));
   data.Name(1,i)=ide_names(i,1);
   data.Value=B(index,1);
end

% I want to create a new data struct(data) using the filtered Index from Cell Array A with values contain in B column vector. However, Once I ran the code below error is poping up.

_Undefined function 'eq' for input arguments of type 'cell'.

Error in a (line 6) index=find(AllNames(:,1)==ide_names(i,1));_

% could someone help me out, please

1 Comment

Jan Simon on 6 May 2013

I have formatted your code. It is easy: mark it with the mouse, hit the "{} Code" button, care for a blank line before and after the code.

Kushan

Products

No products are associated with this question.

3 Answers

Answer by Andrei Bobrov on 6 May 2013
Edited by Andrei Bobrov on 6 May 2013
AllNames= {'A.1';'A.1';'A.10';'A.10';'A.10';'A.10';'A.15';'A.15';'A.16' ;'A.17';'A.17';'A.17';'A.17';'A.17';'A.20A' ;'A.20A';'A.20A';'A.20A'};
B=[2;6;3;4;5;1;8;6;4;3;2;8;6;1;6;8;9;2];
[a,c,c] = unique(AllNames); %[EDIT}
bb = accumarray(c,B,[],@(x){x});
data = struct('Name',a,'Value',bb);

0 Comments

Andrei Bobrov
Answer by Kushan on 6 May 2013

Thanks a lot for your quick response. But below line is not working

[a,~,c] = unique(AllNames,'stable');

The below error massage is popping up

 [a,~,c] = unique(AllNames,'stable');
Error using cell/unique (line 28)
Unrecognized option.

Please help me out

1 Comment

Andrei Bobrov on 6 May 2013

See EDIT part in my answer.

Kushan
Answer by Jan Simon on 6 May 2013

You can change the line:

index=find(AllNames(:,1)==ide_names(i,1));  % ERROR

to

index = strcmp(AllNames(:,1), ide_names{i,1});

But using the outputs of unique is faster.

0 Comments

Jan Simon

Contact us