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

在matlab中比较矩阵行和构造一维数组?,matlab,bsxfun,Matlab,Bsxfun,我有[句子*单词]矩阵,其中行标记为句子,列标记为单词,我使用的代码是: 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

我有[句子*单词]矩阵,其中行标记为句子,列标记为单词,我使用的代码是:

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行中,应将我与所有剩余行进行比较,并将第2行与所有剩余行进行比较,直到第n行。应执行此操作,该操作应将结果保存在1D数组中,如下所示:

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

如果有人能更好地为矩阵实现等式关系,请建议我,谢谢你,你可以用它来比较句子。设
M
为大小
#句子
-by-
#单词
的逻辑矩阵,然后

cmp = bsxfun( @eq, permute(M,[1 3 2]), permute(M,[3 1 2]) )

现在您有了一个逻辑数组
cmp
,大小为
#句
-by-
#句
-by-
#字
,其中向量
v!ij=cmp(ii,jj,:)
v!ij(k)=true
iff句子
ii
和句子
jj
中有
k
这个词。

你能解释一下
句子
是如何填充的吗?实际上我从一个文本文件中提取句子,并在每个句号结束后将其拆分,句子将所有句子存储在一个文本文件中。代码如下:句子=regexp(F,“\S.*?[\.\!\?]”,“'match')
字符(句子)
,那么是什么使得子引用在这里不可行呢<代码>文本={'hi','this','is','a','foo','句子'};提取=文本([1,2,6])。请注意,这与等式关系无关,但由于我只在示例中看到赋值,我猜赋值就是您的目标。@patrik我们这里有完整的句子,而不是单个字符,例如,假设一个句子:“我喜欢红色”在这里,红色是通过分析文本文档根据其在文本中的频率提取的。其次,这不是作业,这是我想要的输出。请告诉我你为什么写[1 3 2]和[3 1 2]因为我有一个单词变量,它有频繁出现的单词和句子变量,它存储了我案例中的所有句子,所以我有6个单词和23个句子。