#matlab #struct #cell
#matlab #структура #ячейка
Вопрос:
Это мой вопрос.
У меня есть следующие переменные:
A={'BB.AI';'JL.AI';'BB.AA';'HH.JJ.BB';'JL.H1.P6';'H1.P2'};
B={'BB';'BB.JJ';'JL.H1.P6'};
Теперь мне нужна функция, которая использует в качестве входной информации B в A и получает следующую информацию:
[Result]=Somefunction(A,B)
И переменный результат — это структура:
Result(1).label={'BB'}; % Is the first value of cell array B.
Result(1).f1={'BB.AI';'BB.AA';'HH.JJ.BB'}; % These are all the values of cell array A which have 'BB';
Result(1).f2=[1;3;4]; % These are the positions in A with the value 'BB';
Result(2).label={'BB.JJ'}; % Is the second value of cell array B.
Result(2).f1={'HH.JJ.BB'}; % This is the values of cell array A which have 'BB.JJ';
Result(2).f2=[4]; % These is the position in A with the value 'BB.JJ';
Result(3).label={'JL.H1.P6'}; % Is the third value of cell array B.
Result(3).f1={'JL.H1.P6'}; % This is the values of cell array A which have 'JL.H1.P6';
Result(3).f2=[5]; % This is the position in A with the value 'JL.H1.P6';
Result(4).NoneUsed={'JL.AI','H1.P2'}; % These are the values which weren't used.
Result(4).f2=[2;6]; % These are the positions in A with the values non used;
Я пытался это сделать, но мне пришлось использовать много циклов, я надеюсь, что вы сможете упростить это, возможно, с помощью cellfuns, спасибо!
Ответ №1:
[Result]=SomeFunction(A,B)
H2=[];
for i=1:size(B,1)
[a] = strread(B{i}, '%s', 'delimiter','.');
H=cell(size(a,1),1);
for k=1:size(a,1)
H{k,1} = cell2mat(cellfun(@isempty,(strfind(A,a{k})),'UniformOutput', false))==0;
end
H=cell2mat(H');
if size(H,2)>1
H=sum(H')';
end
H=find(H==size(a,1));
if ~isempty(H)
Result(i).label=B{i};
Result(i).f1=A(H);
Result(i).f2=H;
end
H2=[H2,H'];
clearvars H
end
A2=A;A3=1:size(A,1);
A3(unique(H2))=[];
A2(unique(H2))=[];
Result(i 1).label=A2;
Result(i 1).f1=A3;