我需要创建一个非常大的三维矩阵(例如:500000x60x60
)。有没有办法在matlab中实现这个?
当我尝试时,
omega = zeros(500000,60,60,'single');
我遇到了一个内存溢出错误。
sparse函数不是一个选项,因为它只适用于2D矩阵。那么是否有更高维度矩阵的替代方法呢?
我需要创建一个非常大的三维矩阵(例如:500000x60x60
)。有没有办法在matlab中实现这个?
当我尝试时,
omega = zeros(500000,60,60,'single');
我遇到了一个内存溢出错误。
sparse函数不是一个选项,因为它只适用于2D矩阵。那么是否有更高维度矩阵的替代方法呢?
Matlab 只支持稀疏矩阵 (2D)。对于3D张量/数组,您需要使用一些变通方法。我能想到两种方法:
您可以这样创建一个稀疏向量:
A = spalloc(500000*60*60, 1, 100);
最后一个条目(100
)指的是最终要分配给A
的非零数量。如果您事先知道此数量,则可以使A
的内存使用更加高效。如果您不知道它,请使用接近此数量的某个数字,它仍将起作用,但A
最终可能会比严格需要的内存消耗更多。
然后,您可以像处理3D数组一样引用元素:
A(sub2ind(size(A), i,j,k))
其中i
,j
和k
分别是第一、二、三维的索引。
将3D张量/数组中的每个2D页面创建为一个单元数组:
a = cellfun(@(x) spalloc(500000, 60, 100), cell(60,1), 'UniformOutput', false);
spalloc
条目。然后像这样在三维中连接:A = cat(3, a{:});
A{i,j,k}
其中i
、j
和k
分别是第1、2、3维的索引。
sparse
命令创建稀疏矩阵。 - Andrey Rubshtein