0

私は太陽のデータを巨大な (17GB) マトリックスに持っています。これを A と呼びます。各列は、1 年半にわたって 1 秒間のデータを収集した 1 つのステーションを表します。ステーションは物理的に地上にグリッド形式であり、(おおよそ) 列番号に対応しています。次のように、9x9 マトリックス (B と呼びます) でステーション番号を使用してレイアウトを表しました。

38     0    40     0    42     0    44     0    49
 0    28     0     0    30     0     0    33     0
37     0     5    10    15    20    25     0    48
 0     0     4     9    14    19    24     0     0
36    27     3     8    13    18    23    32    47
 0     0     2     7    12    17    22     0     0
35     0     1     6    11    16    21     0    46
 0    26     0     0    29     0     0    31     0
34     0    39     0    41     0    43     0    45

ゼロはブランクスポットです。ここで、巨大なマトリックス A の各行を新しい多次元マトリックス (NewMat と呼びます) の 1 つのスライスとして表し、A の列を上記の 9x9 マトリックスに "マッピング" したいと思います。

私はループに以下を持っています:

for mm = 1:length(A) % rows

    for i = 1:length(HeaderStatNums) % column headers

        [j k] = find(B == HeaderStatNums(i));

        NewMat(j,k,mm) = A(mm,i+1); % This maps to the new matrix. (The i+1 is just 
                                    %  a shift
    end
end

これは機能しますが、元の行列のサイズが原因で、メモリが不足することなく NewMat で A のコピーを作成できません。私は 16GB の物理と約 15GB の仮想を持っています。したがって、A の一部のみを NewMat にコピーできます。解決策の 1 つは、行列が格納されている MAT ファイルを読み込んでアンロードすることですが、これは面倒です。何か案は?

4

1 に答える 1