How to obtain the filtered Index of Cell Array
3 次查看(过去 30 天)
显示 更早的评论
% 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 个评论
Jan
2013-5-6
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.
回答(3 个)
Andrei Bobrov
2013-5-6
编辑:Andrei Bobrov
2013-5-6
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 个评论
Jan
2013-5-6
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 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Startup and Shutdown 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!