私は太陽のデータを巨大な (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 ファイルを読み込んでアンロードすることですが、これは面倒です。何か案は?