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

Arrays 如何在matlab中消除单元数组中的重复整数,arrays,matlab,Arrays,Matlab,我有[words*Sessions]矩阵,其中句子有整数,表示文本文档中的句子编号。根据这个矩阵,我构建了[1*N]的1D数组,它显示单词,以及它们在哪些句子中按编号出现。 完成上述步骤后,我将进行交叉检查,检查哪些单词出现在哪些句子中,代码如下: OccursTogether = cell(length(Out1)); for ii=1:length(Out1) for jj=ii+1:length(Out1) OccursTogether{ii,jj} = intersect(Out1{ii

我有[words*Sessions]矩阵,其中句子有整数,表示文本文档中的句子编号。根据这个矩阵,我构建了[1*N]的1D数组,它显示单词,以及它们在哪些句子中按编号出现。 完成上述步骤后,我将进行交叉检查,检查哪些单词出现在哪些句子中,代码如下:

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} 

如果有任何帮助,我将不胜感激。

这里有一种使用
cellfun
cell2mat
的方法。其思想是将每个单元垂直连接到单元数组中,将其转换为矩阵并应用
unique
函数

因此,第一步:

a = cellfun(@(x) x.',OccursTogether,'uni',false)
获取每个单元格并将其转置,从而生成一个
nx1
向量。结果是一个包含垂直向量的单元数组:

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

希望这就是你的意思!如果没有,请告诉我。

如果我理解正确:

result = unique([OccursTogether{:}]);
在您的示例中,这给出了

result =
     5     9    10    12    14    16

谢谢你的回答,第一步做得很好,但当我尝试运行第二步时,它给了我一个错误“使用串联矩阵的'cat'维数的错误是不一致的。”我希望你能理解可能存在的重复问题