我有[单词*句子]矩阵,其中句子具有整数,表示来自该矩阵的文本文档中的句子编号我已经构造了[1 * N]的一维数组,其显示了单词并且在哪些句子中它们出现数字。 一旦上面的步骤完成,我已经采取交叉检查哪些单词一起出现在哪些句子代码如下:
OccursTogether = cell(length(Out1));
for ii=1:length(Out1)
for jj=ii+1:length(Out1)
OccursTogether{ii,jj} = intersect(Out1{ii},Out1{jj});
end
end
celldisp(OccursTogether)
样本输出如下所示,表示句子中出现第一个单词 {5 10 16}同一个词出现在句子{11 12 13}中的第二个单词中,单词1出现在句子{9 14}中的单词3中,依此类推至第N个单词:
OccursTogether{1,1} = 5 10 16
OccursTogether{2,1} = 5 12 16
OccursTogether{3,1} = 9 14
现在我想要的是根据OccursTogether单元格数在一行中显示输出,而不重复句号如下:
output: {5 9 10 12 14 16}
任何帮助我都会感激..
答案 0 :(得分:0)
以下是使用cellfun
和cell2mat
的方法。我们的想法是从单元格数组垂直连接每个单元格,将其转换为矩阵并应用unique
函数。
所以第一步:
a = cellfun(@(x) x.',OccursTogether,'uni',false)
获取每个单元格并对其进行转置,从而生成n x 1
向量。结果是包含垂直向量的单元格数组:
a =
[3x1 double]
[3x1 double]
[2x1 double]
现在我们可以使用cell2mat
转换为数字矩阵,因为维度适合并最终应用unique
。否则这是不可能的(例如使用1x3和1x2向量)。
在一行中看起来像这样:
output = unique(cell2mat(cellfun(@(x) x.',OccursTogether,'uni',false)))
output =
5
9
10
12
14
16
希望这就是你的意思!如果没有,请告诉我。
答案 1 :(得分:0)
如果我理解正确:
result = unique([OccursTogether{:}]);
在你的例子中,这给出了
result =
5 9 10 12 14 16