2013-09-16 3 views
0

У меня есть массив ячеек, содержащие клетки, как следующие:элемент массива внутри элементов порядка массива ячеек Matlab

A= 
<1x4 cell> <1x4 cell> <1x4 cell> 
<1x4 cell> <1x4 cell> <1x4 cell> 
<1x4 cell> <1x4 cell> <1x4 cell> 
<1x4 cell> <1x4 cell> <1x4 cell> 
<1x4 cell> <1x4 cell> <1x4 cell> 
<1x4 cell> <1x4 cell> <1x4 cell> 
<1x4 cell> <1x4 cell> <1x4 cell> 
<1x4 cell> <1x4 cell> <1x4 cell> 
<1x4 cell> <1x4 cell> <1x4 cell> 
<1x4 cell> <1x4 cell> <1x4 cell> 

Каждая ячейка содержит числовых значения, как A{1,1}=[1.6386e+03] [1589] [406.9268] [184.6770]

Учитывая, что a={'el1','el2','el3','el4'}, я хотел бы получить выход B формы:

B{1}=[a;A{1,1};A{2,1};A{3,1}...] 
B{1}= 
'el1' 'el2' 'el3' 'el4' 
1638.60000000000 1589   406.926813049605     184.676951989012 
1665.10000000000 1614.60000000000 399.333905068047 362.462074500098 
1709.60000000000 1657.80000000000 389.181059994089 529.870013181953 
... 

B{2}=[a;A{1,2};A{2,2};A{3,2}...] 
... 

Как это может быть выполнено без написания каждой клетки (т.е. {1,1}, A {1,2} ...)

ответ

0

Вы можете использовать конкатенацию (cat) и индексацию, чтобы получить этот результат:

%Create some inputs 
A = arrayfun(@(~)num2cell(randn(1,4)),zeros(10,3), 'uniformoutput',false); 
a={'el1','el2','el3','el4'}; 

Затем, чтобы создать B {1} массив ячеек:

%Vertically concatenate the a header with all elements in the first column of A 
B{1} = cat(1, a, A{:,1}) 

Чтобы создать все B

for ixColumn = 1:size(A,2) %Or, loop backwards for slightly better performance. IE "ixColumn = (size(A,2):-1:1" 
    B{ixColumn } = cat(1, a, A{:,ixColumn }); 
end 
+0

Спасибо за этот полезный подход – user2751649

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