Arrays matlab:逻辑比较两个单元阵列

Arrays matlab:逻辑比较两个单元阵列,arrays,excel,matlab,parsing,boolean,Arrays,Excel,Matlab,Parsing,Boolean,我有一个excel文件,从中我获得了两个字符串数组,Titles(维度6264x1)和另一个Names(维度45696x1)。我想创建一个大小为6264x45696的输出矩阵,在元素中包含1或0,如果Titles包含name,则为1 我想我想要的东西大致如下: for (j in Names) for (k in Titles) if (Names[j] is in Titles[k]) write to excel end

我有一个excel文件,从中我获得了两个字符串数组,
Titles
(维度6264x1)和另一个
Names
(维度45696x1)。我想创建一个大小为6264x45696的输出矩阵,在元素中包含1或0,如果
Titles
包含
name
,则为1

我想我想要的东西大致如下:

for (j in Names)
    for (k in Titles)
        if (Names[j] is in Titles[k])
            write to excel
        end
    end
end
但是我不知道我应该使用什么函数来实现我在图片中的功能。以下是我的想法:

[~,Title] = xlsread('exp1.xlsx',1,'A3:A6266','basic');
[~,Name] = xlsread('exp1.xlsx',2,'B3:B45698','basic');
A = cellstr(Title);
GN = cellstr(Name);
BinaryMatrix = false(45696,6264);
for i=1:1:45696
    for j=1:1:6264
        if (~isempty(ismember(A,GN)))
            BinaryMatrix(i,j)= true;        
        end
    end
end

这段代码的问题是它永远不会完成运行,尽管matlab中没有任何建议

您可以使用
unique
的第三个输出来获取每个字符串元素对应的数字,并使用
bsxfun
来比较数字

GN = cellstr(Name);
A = cellstr(Title);
B = [ GN(:); A(:)];
[~,~,u]= unique(B);
BinaryaMatrix = bsxfun(@eq, u(1:numel(GN)),u(numel(GN)+1:end).');

您可以使用
unique
的第三个输出来获取每个字符串元素对应的数字,并使用
bsxfun
来比较数字

GN = cellstr(Name);
A = cellstr(Title);
B = [ GN(:); A(:)];
[~,~,u]= unique(B);
BinaryaMatrix = bsxfun(@eq, u(1:numel(GN)),u(numel(GN)+1:end).');
可以处理字符向量的单元格数组。它的第二个输出告诉您需要的信息,您可以使用这些信息构建结果(也可以通过预分配和使用[
sub2ind
):

可以处理字符向量的单元格数组。它的第二个输出告诉您需要的信息,您可以使用这些信息构建结果(也可以通过预分配和使用[
sub2ind
):


尝试使用parfor代替
for
也许是一个小技巧。@HunterJiang我在使用parfor代替第一个for时得到了这个输出,我如何重新格式化if语句以便与parfor一起使用?错误:parfor中的变量BinaryMatrix无法分类。请参阅MATLAB中的Parallel for循环,“概述”.@但是,我发现您的代码似乎多次执行相同的操作。(始终
a
GN
)尝试使用parfor代替
for
也许是一个小技巧。@HunterJiang我在使用parfor代替第一个for时得到了这个输出,我如何重新格式化if语句以便与parfor一起使用?错误:parfor中的变量BinaryMatrix无法分类。请参阅MATLAB中的Parallel for循环,“概述”.@但是,我发现您的代码似乎多次执行相同的操作。(始终
a
GN