2016-09-07 15 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は(733x436)されている保存された7つの変数を格納します。
ありがとうございます。

+0

あなたの質問を言い換えるするには、あなたが*** overlap' 'に格納された値にアクセスする方法***、求めている、あなたが求めているものということでしょうか? –

+0

列ベクトルを2次元配列に連結するのではなく、セル配列を使用する特別な理由はありますか?それらはすべて同じサイズであるように見えます。 – 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}は、2番目のセルで行列全体を取得します。

あなたは7つの変数が必要だと指定しました。あなたのコードは、セルが異なる変数(var1var2 ...)に割り当てるよりも優れていることを知っていることを暗示しています。良い!さまざまな変数を持つソリューションは悪い悪いです。

セル配列を使用する代わりに、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

ありがとうございます! –