Arrays 在MatLab细胞中寻找str基因

Arrays 在MatLab细胞中寻找str基因,arrays,matlab,cells,Arrays,Matlab,Cells,我目前正在使用MatlabR2014A 我有一个数组和一个单元格: MyArray = ['AA1', 'AA2', 'AB1', 'AB2', 'Acc1', 'Acc2']; MyCell = {'Name1AA1', 'Name2AA1', 'Name3Acc2', 'Name4AB2', 'Name5AD1}; MyArray由可在MyCell中重复的代码名组成。 我想检查MyArray中是否有任何字符串在MyCell中,如果是,请将名称保存到新单元格中 目前我有: NewCell

我目前正在使用MatlabR2014A

我有一个数组和一个单元格:

MyArray = ['AA1', 'AA2', 'AB1', 'AB2', 'Acc1', 'Acc2'];


MyCell = {'Name1AA1', 'Name2AA1', 'Name3Acc2', 'Name4AB2', 'Name5AD1};
MyArray由可在MyCell中重复的代码名组成。 我想检查MyArray中是否有任何字符串在MyCell中,如果是,请将名称保存到新单元格中

目前我有:

NewCell = {};
for i = 1:length(MyCell)
    for j = 1:length(MyArray)
        Find = strfind(MyCell(i), MyArray)
        if ~isempty(Find)
            NewCell = {NewCell; MyCell(j)}
        end
    end
end
但是,当我使用strfind时,会收到以下错误消息:

“char”类型的输入参数的未定义函数“strfind”

如果我使用strcmp而不是strfind,我会得到一个MyCell中所有内容的数组,该数组由MyArray中的元素数重复

我的理想输出是:

NewCell1 = {'Name1AA1', 'Name2AA1'}
NewCell2 = {'Name4AB2'}
NewCell3 = {'Name3Acc2'}
也就是说,MyArray中不存在的代码名没有新单元格,或者如果MyArray中有代码名但MyCell中没有,则没有新单元格


欢迎提供任何帮助,感谢您的时间

您可以使用正则表达式的组合来实现所需的输出。不建议您采用动态命名变量的方法,这样会导致代码更难调试。改用索引

你们可以阅读Matlab论坛上的信息性帖子来了解原因

%Your input data.
MyArray = ['AA1', 'AA2', 'AB1', 'AB2', 'Acc1', 'Acc2'];
MyCell = {'Name1AA1', 'Name2AA1', 'Name3Acc2', 'Name4AB2', 'Name5AD1'};

%Find common elements between MyArray and MyCell.
elem = cellfun(@(x) regexp(MyArray,x(end-2:end),'match'),MyCell,'un',0);

%Eliminate duplicates.
NewCell = unique([elem{:}]);

%Find elements in MyCell which end with NewCell elements and group them.
NewCell = cellfun(@(x) regexp([MyCell{:}],strcat('Name\d\w?',x),'match'),NewCell,'un',0);

%Join elements. 
NewCell{1} = {strjoin(NewCell{1},''',''')};
NewCell{1}={'Name1AA1','Name2AA1'}

NewCell{2}={'Name4AB2'}


NewCell{3}={'Name3Acc2'}

我不必像这样从数组中查找代码名,但我想不出比for循环更快的方法。我不知道['AA1','AA2','AB1','AB2','Acc1','Acc2']与[AA1AA2AB1AB2Acc1Acc2]相同。另外,感谢您让我知道,我完全误读了函数MyArray中的任何字符串,但MyArray是一行字符向量。按照您定义它的方式,您只是将“AA”、“AA2”等连接在一起。您的代码是一堆未定义的变量名,strfnd不存在。请先运行您键入的代码,然后再复制粘贴到此处。如果代码正确,沟通就容易多了。我猜菌丝体1是菌丝体,菌丝体2是MyArray?为什么要与MyCell1i和save MyCellj进行比较?另外,我建议您不要使用NewCell={NewCell;MyCellj},使用NewCell{end+1}=MyCellj更有效。这个链接非常好!是的,我同意:斯蒂芬在那里确实做得很出色。