我有一个巨大的 (17GB) 矩阵中的太阳能数据,称之为 A。每一列代表一个站点,该站点在一年半的时间里收集了一秒钟的数据。这些站点在地面上是物理上的网格格式,并且(大致)对应于列号。我使用 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)的一个切片,其中 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 中。一种解决方案是加载和卸载存储矩阵的 MAT 文件,但这很笨重。有任何想法吗?