gpt4 book ai didi

Matlab 3d 矩阵

转载 作者:太空宇宙 更新时间:2023-11-03 19:26:51 30 4
gpt4 key购买 nike

我必须创建一个非常大的 3D 矩阵(例如:500000x60x60)。有没有办法在 matlab 中做到这一点?

当我尝试

omega = zeros(500000,60,60,'single');

我收到一个内存不足错误。

稀疏函数不是选项,因为它仅适用于二维矩阵。那么对于高维矩阵,是否有其他替代方案?

最佳答案

Matlab 仅支持稀疏矩阵 (2D)。对于 3D 张量/数组,您必须使用变通方法。我能想到两个:

  1. 线性索引
  2. 元胞数组

线性索引

您可以像这样创建一个稀疏向量:

A = spalloc(500000*60*60, 1, 100); 

其中最后一项 (100) 指的是最终分配给 A 的非零数量。如果您事先知道这个数量,它会使 A 的内存使用效率更高。如果您事先不知道它,只需使用一些接近它的数字,它仍然可以工作,但是 A 最终会消耗比严格需要更多的内存。

然后你可以引用元素,就像它是一个 3D 数组一样:

A(sub2ind(size(A), i,j,k)) 

其中,ijk 分别是第 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}

其中,ijk 分别是第 1、2、3 维的索引。

关于Matlab 3d 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12643279/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com