Matlab三维矩阵
我必须创建一个非常大的3D矩阵(例如:Matlab三维矩阵,matlab,sparse-matrix,Matlab,Sparse Matrix,我必须创建一个非常大的3D矩阵(例如:500000x60x60)。在matlab中有什么方法可以做到这一点吗 当我尝试 omega = zeros(500000,60,60,'single'); 我得到一个内存不足的错误 稀疏函数不是选项,因为它仅适用于二维矩阵。那么对于高维矩阵有什么替代方法吗?由于矩阵是稀疏的,请尝试使用(N维稀疏数组FEX)Matlab仅支持稀疏矩阵(2D)。对于三维张量/数组,必须使用变通方法。我可以想到两个: 线性索引 细胞阵列 线性索引 您可以创建一个稀疏向量,如下
500000x60x60
)。在matlab中有什么方法可以做到这一点吗
当我尝试
omega = zeros(500000,60,60,'single');
我得到一个内存不足的错误
稀疏函数不是选项,因为它仅适用于二维矩阵。那么对于高维矩阵有什么替代方法吗?由于矩阵是稀疏的,请尝试使用(N维稀疏数组FEX)Matlab仅支持稀疏矩阵(2D)。对于三维张量/数组,必须使用变通方法。我可以想到两个:
线性索引
细胞阵列
线性索引
您可以创建一个稀疏向量,如下所示:
A = spalloc(500000*60*60, 1, 100);
A(sub2ind(size(A), i,j,k))
A = cat(3, a{:});
A{i,j,k}
其中最后一项(100
)指最终分配给A
的非零数量。如果您事先知道这个数量,则A
的内存使用效率会更高。如果您事先不知道它,只需使用一些接近它的数字,它仍然可以工作,但是A
最终会消耗比严格要求更多的内存
然后,您可以引用元素,就像它是一个三维阵列一样,如下所示:
A = spalloc(500000*60*60, 1, 100);
A(sub2ind(size(A), i,j,k))
A = cat(3, a{:});
A{i,j,k}
其中,i
,j
和k
分别是第一、第二和第三维度的索引
细胞阵列
将三维张量/数组中的每个二维页面创建为单元数组:
a = cellfun(@(x) spalloc(500000, 60, 100), cell(60,1), 'UniformOutput', false);
在spalloc
中的最后一个条目也是如此。然后在3D中连接,如下所示:
A = spalloc(500000*60*60, 1, 100);
A(sub2ind(size(A), i,j,k))
A = cat(3, a{:});
A{i,j,k}
然后,您可以引用单个元素,如下所示:
A = spalloc(500000*60*60, 1, 100);
A(sub2ind(size(A), i,j,k))
A = cat(3, a{:});
A{i,j,k}
其中,i
,j
和k
分别是第一、第二和第三维度的索引 欢迎使用Stack Overflow,请通过编辑您的问题向我们展示您所做的工作。使用sparse
命令创建稀疏矩阵请描述无法创建此矩阵的原因。另外,告诉我们你的矩阵是否稀疏。我的矩阵是稀疏的。但关键是,当维数大于2时,我没有发现如何在matlab中创建稀疏矩阵。安德烈,正如我之前所说,我的问题来自“内存不足”错误。这就是为什么我不能创建这个矩阵的原因。我想你在寻找一个稀疏张量。看看你的答案。