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分别是第1,第2和第3维的指数.
细胞阵列
在3D张量/数组中创建每个2D页面作为单元格数组:
a = cellfun(@(x) spalloc(500000, 60, 100), cell(60,1), 'UniformOutput', false);
最后一次进入spalloc也是如此.然后在3D中连接如下:
A = cat(3, a{:});
然后你可以像这样引用个别元素:
A{i,j,k}
其中i,j和k分别是第1,第2和第3维的指数.