【问题标题】:Large arrays in MatlabMatlab中的大数组
【发布时间】:2017-01-12 11:14:58
【问题描述】:

我正在尝试在最新的 MATLAB 版本 (R2016b) 中构建大小为 744×744×744×3×3 的五个单精度数组。

但是,当我构建第一个数组时,我得到了错误:

请求的 744x744x744x2x3 (9.2GB) 阵列超出了最大阵列大小首选项。创建大于此限制的数组可能需要很长时间 时间并导致 MATLAB 变得无响应。有关详细信息,请参阅数组大小限制或首选项面板。

我在 MATLAB 中将工作区首选项设置为最大数组大小 1e4,这是它所允许的全部。我将 Windows 10 中的最大虚拟内存设置为 400GB。

我也阅读了这个论坛的相关帖子,但他们没有回答我的问题。是不可能构建这么大的数组还是我遗漏了什么?

【问题讨论】:

  • 为什么要保存这么大的矩阵?处理这样的矩阵非常困难和缓慢,最好将其划分为一些文件或变量......
  • 如果可能的话,我更愿意这样做,因为我已经编写了一个非常适用于较小数组的程序。这是一个带有反向归纳的随机动态规划优化。如果不可能有那么大的数组,我认为必须重新编写模型并逐步进行,即构建矩阵的一部分并保存最后一层,然后构建下一部分。但我更愿意让它保持现在的工作方式。
  • 应该是五个 13.8GB 阵列(总共 69GB)。不用说,如果 MATLAB 没有足够的连续 RAM 可用,这将是一个问题。 memory(在 MATLAB 中)的输出是什么? sparse 有帮助吗?
  • 顺便问一下,是 744×744×744×3×3(在你的问题中)还是 744×744×744×2×3(在 MATLAB 的错误消息中)?
  • 我曾使用过具有超过 512GB 可用 RAM 的服务器和集群。在这类机器上,您的阵列不会造成太大问题。但听起来您使用的是普通 PC,(可能)更像是 16GB 或 RAM。如果是这样的话,这个操作将会非常缓慢——将问题分成更小的部分,就像@Adiel 建议的那样

标签: arrays matlab


【解决方案1】:

你超出了你的内存,我可以建议使用 matfile。

要保存大矩阵(例如My_var,大小为 Nvar1 x Nvar2),而不会减慢其他进程...

myObject = matfile('myFilename.mat','Writable',true);
myObject.myVariablenameinObject(1:Nvar1,1:Nvar2)=My_var(1:Nvar1,1:Nvar2)

通过将 'Writable' 设置为 true,您可以访问、修改或写入数据。如果你不想写。只需使用:

myObject = matfile('myFilename.mat')

更多详情,请参考this link

【讨论】:

    猜你喜欢
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 2021-11-17
    相关资源
    最近更新 更多