如何处理1D单元阵列并在matlab中比较它的元素?

时间:2015-03-06 13:31:14

标签: matlab

我有1D单元阵列" Out"其中每个元素描述一个单词,在这个元素中是一个向量,告诉你单词出现在哪个句子中。

例如,如果单词是test,则树和红色的ID分配为1,2和3

的单元格元素中的潜在向量

Out {1}可能是[1,5,8]

Out {2}可能是[1,6,8]

Out {3}可能是[2,8]

这意味着单词test出现在句子1,5和8中。

单词树出现在句子1,6和8中。

单词red出现在句子2和8中。

我想要做的是将测试矢量值与其他2个矢量值进行比较,并对树和红色矢量进行比较,以便找出它们之间的常见值(句子)。在我的情况下,我有n个元素

输出应该表明:

测试和树一起出现在1和8中。

树和红色一起出现在8中。

我希望他回答不管代表性,无论是矩阵还是任何其他技术,这种逻辑都可以实现,这将是富有成效的。

我用于创建单元格的代码是:

 Out1 = cell(numel(out_words), 1);
 for idx = 1 : numel(out_words) %// For each word...
 K = strfind(sentences, out_words{idx});
 ind = cellfun('isempty', K); %// Determine which locations are EMPTY
 Out1{idx} = find(~ind);
 end

1 个答案:

答案 0 :(得分:1)

您可以使用intersect命令执行此操作:

a = [1 5 8];
b = [1 6 8];
c = [2 8];

ab = intersect(a,b)
bc = intersect(b,c)
ac = intersect(a,c)

的产率:

ab =

     1     8


bc =

     8


ac =

     8

如果你想要的话,你可以循环输出单元格以找到所有可能的组合:

Out{1} = [1 5 8];
Out{2} = [1 6 8];
Out{3} = [2 8];

OccursTogether = cell(length(Out));

for ii=1:length(Out)
    for jj=ii+1:length(Out)
        OccursTogether{ii,jj} = intersect(Out{ii},Out{jj});
    end
end

(在上面的代码中我假设您的单元格Out是包含单词的1xN或Nx1单元格)

或者,如果您不希望单元格数组中有空条目:

Out{1} = [1 5 8];
Out{2} = [1 6 8];
Out{3} = [2 8];

counter = 0;

for ii=1:length(Out)
    for jj=ii+1:length(Out)
        occurences = intersect(Out{ii},Out{jj});
        if ~isempty(occurences)
            counter = counter+1;
            pairing{counter} = [ii jj];
            locations{counter} = occurences;
        end
    end
end