2016-07-24 4 views
0

Как преобразовать массив ячеек в стандартную матрицу?Преобразование ячейки в стандартную матрицу

Например:
A{1} содержит матрицу 11 строк * 2 колонки
A{2} кс линии * 2 колонки (это всегда две колонки матрицы)
...
A{n} кс линии * 2 столбцов матрицы.

Количество строк, x, меняется каждый раз, когда индекс ячейки, n, изменяется.
Другими словами, каждое содержимое ячейки всегда имеет ширину в два столбца, но содержит различное количество строк.

Я хотел бы хранить их в стандартной матрице B (x, 1: 2, n) с 2 столбцами и x, изменяясь в соответствии с изменением n.

Например, если A{1} равно 11x2, эти значения сохраняются в B следующим образом: B(1:11,1:2,1).
Если A{n} является x * 2, B сохранит эти значения как B(1:x,1:2,n).

Спасибо.

+0

Можете ли вы опубликовать несколько примеров, пожалуйста, ваших матриц? –

+0

Это будет динамически изменять ваше первое измерение трехмерной матрицы 'B'. И заполнить так называемые неопределенные значения до нулей. Не уверен, что вы этого хотите. –

+2

Стандартный (неэлементный) массив 'B (x, 1: 2, n)' не может иметь разные 'x' для каждого' n' –

ответ

1

Генерация тестовых данных:

A{1} = ones(11, 2) 
A{2} = 2 * ones(22, 2) 
A{3} = 3 * ones(33, 2) 

A = 

    [11x2 double] [22x2 double] [33x2 double] 

>> whos A 
    Name  Size   Bytes Class Attributes 

    A   1x3    1392 cell 

ручного способа (если вы знаете размеры):

B(1:11, 1:2, 1) = A{1} 
B(1:22, 1:2, 2) = A{2} 
B(1:33, 1:2, 3) = A{3} 

зацикленной подход:

for k = 1:numel(A) 
    B(1:size(A{k},1), 1:2, k) = A{k}; 
end 
>> whos B 
    Name  Size    Bytes Class  Attributes 

    B   33x2x3    1584 double 

Как вы можете видеть, самый большой первый размер ваших матриц будет определять размер первого измерения вашей трехмерной матрицы, то есть:

>> B(:, :, 2) 
= 
2  2 
2  2 
2  2 
2  2 
2  2 
2  2 
... 
2  2 
2  2 
0  0 
... 
0  0 

Edit: вы можете также предварительно выделить B:

B = zeros(max(cellfun('size', A, 1)), max(cellfun('size', A, 2)), numel(A)) 
Смежные вопросы