Я принимаю column
рассчитывается с использованием процедуры, в которой каждый столбец зависит от последнего. Если нет, то очень вероятно, усовершенствования, которые могут быть сделаны к этому:
column = zeros(733, 1); % Might not need this. Depends on you code.
all_columns = zeros(xdim, ydim); % Pre-allocate memory (always do this)
% Note that the first dimension is usually called x,
% and the second called y in MATLAB
overlap = cell(7, 1);
overlap(:) = {zeros(xdim, ydim)}; % Pre-allocate memory
for ii = 1:numel(overlap) % numel is better than length
for jj = 1:ydim % ii and jj are better than i and j
% several_lines_of_code_to_calculate_column
column = something;
all_columns(:, jj) = column;
end
overlap{ii} = all_columns;
end
Вы можете получить доступ к переменным в overlap
, как это: overlap{1}(1,1);
. Это получит первый элемент в первой ячейке. overlap{2}
получит всю матрицу во второй ячейке.
Вы указали, что хотите 7 переменных. Ваш код означает, что вы знаете, что ячейки лучше, чем присвоение его различным переменным (var1
, var2
...). Хорошо! Решение с разными переменными плохо плохо.
Вместо использования массива ячеек можно использовать 3D-массив. Это может сделать обработку позже быстрее, если вы можете векторизовать материал, например.
Это будет:
column = zeros(733, 1); % Might not need this. Depends on you code.
overlap = zeros(xdim, ydim, 7) % Pre-allocate memory for 3D-matrix
for ii = 1:7
for jj = 1:ydim
% several_lines_of_code_to_calculate_column
column = something;
all_column(:, jj, ii) = column;
end
end
Перефразируя ваш вопрос, вы спрашиваете, *** как получить доступ к сохраненным значениям в 'overlap' ***, это то, что вы спрашиваете? –
Есть ли какая-то конкретная причина, по которой вы используете ячеистые массивы, а не конкатенацию векторов столбцов в 2d-массив? Похоже, что они имеют одинаковый размер. – beaker
Существует множество преобразований из ячеек в матрицы в MATLAB. Поскольку мы не знаем размер 'column_fill' или как оно относится к' column1', сказать сложно. Но, возможно, это не проблема? Я просто принял это, поскольку вы предоставили сообщение об ошибке. – patrik