我有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
答案 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