我有[句子*单词]矩阵,其中行被标记为句子和列,其中包含我用于的代码:
Out = NaN(numel(sentences), numel(out_words));
for i = 1:numel(out_words)
Out(:,i) = cellfun(@(x) numel(strfind(x, out_words{i})), sentences);
end
display(Out)
上面的代码返回一个逻辑矩阵,下面的示例示例说明了这个想法:
1 0 1
1 1 0
0 1 1
1 0 1
上述行中的是句子,列是单词,如果句子中存在单词,则写入1,否则写入0。 现在我要做的是比较行并保存所有在commmon中有1的位置,例如在上面的第1行中,我应该与所有其他剩余的行和row2进行比较,其余所有剩余的直到第n行,此操作应该是执行时应将结果保存在一维数组中,如下所示:
for example:
output=
sentence {1,2} contain red
sentence {1,4} contain red,say
sentence {2,3} contain but
sentence {1,3} contain say
and so on up till n elements
句子{1,2} 1表示句子1,2表示句子2,依此类推至第n句我要比较行并选择两个单词具有1(真)值的位置。
如果有人可以更好地实现矩阵的平等关系,请建议我,谢谢
答案 0 :(得分:0)
您可以使用bsxfun来比较句子。设M
为大小为#sentences
的逻辑矩阵 - 按 - #words
,然后
cmp = bsxfun( @eq, permute(M,[1 3 2]), permute(M,[3 1 2]) )
现在你有一个大小为cmp
的逻辑数组#sentences
- 由 - #sentences
- by - #words
,其中向量v_ij = cmp( ii, jj, : )
有v_ij(k) = true
} iff句子ii
和句子jj
中包含单词k
。