2014-02-13 38 views
2

我有一个包含750个“文档”(单个单元格阵列中的750个单词阵列)的单元阵列。我试图连接所有的单词来制作一个单一的数组。 到目前为止,我知道我需要使用一个for循环通过每个阵列迭代并追加到最后一个结束,但我的代码是给我错误的答案:使用for循环连接多个单元格数组?

list = cell(1,1); 
    for i = 1:length(docs) 
    prevList = list; 
    list = [prevList;docs{i}]; 
end 

我的想法是,我的初始化列表不正确,因为它产生:

[1x1635 char] 
    [1x1476 char] 
    [1x531 char] 
    [1x103 char] 
    [1x1725 char] 
    [1x344 char] 
    [1x463 char] 
    [1x739 char] 
    [1x762 char] 
    [1x1139 char] 
    [1x89 char] 
    [1x361 char] 
    [1x334 char] 
    [1x520 char] 
    [1x219 char] 
and so forth... 

而不是单词列表。

如果有人能帮助我,我会非常感激。

+0

是什么'DOC {I}'包含什么呢?它是一个char向量,还是一个单元阵列?你能举两个或三个文件的小例子,每个文件有几个词吗? –

+0

顺便说一句,'[1x1635 char]'只是Matlab缩短单元格内部的字符串的方式,因为它太长而无法打印到命令窗口。如果该行少于80个字符(我相信 - 或无论您的偏好设置为什么),则会显示实际的字符串。 – horchler

+0

doc {i}是一个单元格数组。每个单元格中都有一段文字,文档{1},文档{2}等等。 @horchler从你说的话,也许这意味着我的代码从一开始就是正确的? – Sandeep

回答

2

for需要循环。让我们用一个小例子:

str1 = 'The quick brown '; 
str2 = 'fox jumped over the '; 
str3 = 'lazy dog. ' 
docs = {str1;str2;str3} % Your cell array containing arrays of text in each row 

docs_cat = [docs{:}] % Concatenate 

返回:

docs_cat = 

The quick brown fox jumped over the lazy dog. 
+0

OP可能需要一段时间才能完成750次! – David

+2

@David:OP指出单元格数组(本例中为“docs”)已经存在。所以需要的只是最后一行。剩下的只是一个例子。 – horchler

+0

这很有意义。如果我想只有独特的词出现,使用unique(),这将如何工作? – Sandeep

0

我不知道如果有一个更快的解决方案追加,但你应该能够做到以下几点:

list = prevList; 
prevLength = length(list); 
for i=1:length(docs) 
    list{prevLength+i} = docs{i} 
end 

不要紧,那是prevLength + i'是超出范围时分配。

+0

我不太确定prevList没有被初始化如何工作?我被要求使用var = {x; y}格式来完成它。 – Sandeep

相关问题