如何在matlab中消除单元格数组中的重复整数

时间:2015-03-12 16:48:49

标签: arrays matlab

我有[单词*句子]矩阵,其中句子具有整数,表示来自该矩阵的文本文档中的句子编号我已经构造了[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} 

任何帮助我都会感激..

2 个答案:

答案 0 :(得分:0)

以下是使用cellfuncell2mat的方法。我们的想法是从单元格数组垂直连接每个单元格,将其转换为矩阵并应用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