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

时间:2018-02-08 02:09:24

标签: arrays excel matlab parsing boolean

我有一个excel文件,我从中获得了两个字符串数组,{62}引入了维度6264x1,另一个Titles维度为45696x1。我想创建一个大小为6264x45696的输出矩阵,其中包含元素a 1或0,如果Names包含Titles则为1。 This is the output that I want.

我想我想要的是:

Names

但我不知道应该用什么功能来实现我在图片中所拥有的功能。以下是我的想法:

for (j in Names)
    for (k in Titles)
        if (Names[j] is in Titles[k])
            write to excel
        end
    end
end

此代码的问题在于它永远不会运行,尽管matlab中没有任何建议。

2 个答案:

答案 0 :(得分:1)

您可以使用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).');

答案 1 :(得分:1)

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

[~, m] = ismember(Titles, Names);
BinaryMatrix = full(sparse(nonzeros(m), find(m), true, numel(Names), numel(Titles)));