2016-09-07 7 views
0

Привет для моего кода Я хотел бы знать, как наилучшим образом сохранить мою переменную column. column - 733x1. В идеале я хотел бы иметь column1(y)=column, но я получаю ошибку:Сохранение значений переменной в MATLAB

Conversion to cell from logical is not possible.

во внутреннем цикле. Мне трудно получить доступ к этим сохраненным значениям в overlap.

for i = 1:7 
    for y = 1:ydim % ydim = 436 
     %execute code %code produces different 'column' on each iteration 
     column1{y} = column; %'column' size 733x1 %altogether 436 sets of 'column' 
    end 
    overlap{i} = column1; %iterates 7 times. 
end 

В идеале я хочу overlap для хранения 7 переменных, которые сохраняются (733x436).
Спасибо.

+0

Перефразируя ваш вопрос, вы спрашиваете, *** как получить доступ к сохраненным значениям в 'overlap' ***, это то, что вы спрашиваете? –

+0

Есть ли какая-то конкретная причина, по которой вы используете ячеистые массивы, а не конкатенацию векторов столбцов в 2d-массив? Похоже, что они имеют одинаковый размер. – beaker

+0

Существует множество преобразований из ячеек в матрицы в MATLAB. Поскольку мы не знаем размер 'column_fill' или как оно относится к' column1', сказать сложно. Но, возможно, это не проблема? Я просто принял это, поскольку вы предоставили сообщение об ошибке. – patrik

ответ

1

Я принимаю 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 
+0

Большое спасибо! –

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