Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab三维矩阵_Matlab_Sparse Matrix - Fatal编程技术网

Matlab三维矩阵

Matlab三维矩阵,matlab,sparse-matrix,Matlab,Sparse Matrix,我必须创建一个非常大的3D矩阵(例如:500000x60x60)。在matlab中有什么方法可以做到这一点吗 当我尝试 omega = zeros(500000,60,60,'single'); 我得到一个内存不足的错误 稀疏函数不是选项,因为它仅适用于二维矩阵。那么对于高维矩阵有什么替代方法吗?由于矩阵是稀疏的,请尝试使用(N维稀疏数组FEX)Matlab仅支持稀疏矩阵(2D)。对于三维张量/数组,必须使用变通方法。我可以想到两个: 线性索引 细胞阵列 线性索引 您可以创建一个稀疏向量,如下

我必须创建一个非常大的3D矩阵(例如:
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中创建稀疏矩阵。安德烈,正如我之前所说,我的问题来自“内存不足”错误。这就是为什么我不能创建这个矩阵的原因。我想你在寻找一个稀疏张量。看看你的答案。