Arrays matlab:逻辑比较两个单元阵列
我有一个excel文件,从中我获得了两个字符串数组,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
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
)