在matlab中比较矩阵行和构造一维数组?

时间:2015-03-23 05:50:26

标签: matlab

我有[句子*单词]矩阵,其中行被标记为句子和列,其中包含我用于的代码:

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(真)值的位置。

如果有人可以更好地实现矩阵的平等关系,请建议我,谢谢

1 个答案:

答案 0 :(得分:0)

您可以使用来比较句子。设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