2014-02-11 4 views
1

У меня есть ячейка, которая состоит из множества различных массивов с различными размерами. Например, это может быть мой мобильный:Как извлечь элементы из ячейки

A = {[-1] [144x1 double] [-1] [331x1 double] [-1] [431x1 double] [-1] [512x1 double]} 

Я хочу сделать гистограмму со всеми данными, содержащимися в клетке. Я пытался делать cell2mat:

B = cell2mat(A); 

для извлечения данных, а затем сделать гистограмму, но он дает эту ошибку:

??? Error using ==> cat 
CAT arguments dimensions are not consistent. 
Error in ==> cell2mat at 81 
      m{n} = cat(2,c{n,:}); 
Error in ==> function at 156 
B = cell2mat(A); 

Я также пытался создать матрицу с петлей :

for j=1:length(A) 

    B = [B; A{j}] 

end 

Но проблема здесь заключается в том, что MATLAB использует те же размеры для всех массивов и заполняет пустые пространства с 0.

Как я могу достичь этого правильно?

+0

Я не хочу, чтобы просто скопировать и вставить решение сверху, то будет однострочник вам нужно: 'B = [cell2mat (cellfun (@ (х) x (:), A, 'uni', 0) ')]' ' – thewaywewalk

+0

Спасибо, ваш nswers были действительно полезны, он работает сейчас. – user3296836

ответ

3

Если все ваши ячейки содержат матрицы размером 1 x n, а ваша ячейка также имеет размер 1 x n, тогда cell2mat будет работать. То же самое справедливо, если все матрицы размера пх 1 и массив ячеек имеет размер ого 1.

Так что в вашем данном примере попробуйте просто:

B = cell2mat(A');

Более обобщенно, цикл будет работать массив ячеек с родовым содержанием NXM с небольшим изменением:

B = []; 
for n=1:length(A)  
    B = [B; A{n}(:)] 
end 
+2

+1 Или используйте 'B = vertcat (A {:})' –

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