2014-02-13 2 views
2

У меня есть массив ячеек, содержащий 750 "документов" (750 массивов слов в массиве одиночных ячеек). Я пытаюсь объединить все слова, чтобы создать один массив. До сих пор я знаю, что нужно использовать цикл для перебора каждого массива и добавить в конце последнего, однако мой код дает мне неправильный ответ:Конкатенация многоядерных массивов с использованием цикла?

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

Что 'документ {я}' содержит ровно? Является ли это вектором char или массивом ячеек? Можете ли вы привести небольшой пример для двух или трех документов с несколькими словами? –

+0

Кстати, '[1x1635 char]' - это просто способ Matlab сократить строку внутри ячейки, которая слишком длинна для печати в окне команд. Если в строке было меньше 80 символов (я полагаю - или независимо от вашего предпочтения), тогда будет отображаться фактическая строка. – horchler

+0

doc {i} - массив ячеек. В каждой ячейке есть абзац слов, doc {1}, doc {2} и т. Д. @horchler от того, что вы сказали, может быть, это значит, что мой код был правильным с самого начала? – Sandeep

ответ

2

No 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 + я» вне диапазона во время назначение.

+0

Я не слишком уверен, как это работает, поскольку prevList не инициализируется? Меня попросили сделать это, используя формат var = {x; y}. – Sandeep

Смежные вопросы