【问题标题】:Octave - out of memory or dimension too large for Octave's index typeOctave - 内存不足或尺寸对于 Octave 的索引类型来说太大
【发布时间】:2018-02-03 12:00:57
【问题描述】:

我知道有 3 个问题带有类似的异常消息。不幸的是,没有一个问题得到解答,cmets 也无法解决我的问题。

我在 Windows 10 系统上使用 64 位版本的 Octave 4.2.1,总共有 16 GB RAM,运行时大约有 11 GB 空闲。 当我尝试将 60000 x 10 矩阵与 10 x 60000 矩阵相乘时,Octave 出现以下异常:

错误:内存不足或尺寸对于 Octave 的索引类型来说太大

这种乘法将产生一个 60000 x 60000 的矩阵,因此对于 64 位索引应该不是问题。 我什至不能zeros(60000,60000);

我不明白我做错了什么。有人能指出我正确的方向吗?

【问题讨论】:

    标签: windows matrix memory out-of-memory octave


    【解决方案1】:

    通常情况下,这个错误经常被误解(也许我们应该已经将其作为八度音程跟踪器上的一个错误来解决;))

    >> 60000*60000
    ans =    3.6000e+09
    >> intmax
    ans = 2147483647
    >> 60000*60000 > intmax
    ans = 1
    

    即生成的 60000x60000 矩阵的元素数大于系统支持的最大整数表示,因此无法使用整数索引对此类矩阵进行线性索引。

    此外,为了使用 实际 64 位索引,您需要以这种方式编译 octave,因为这往往不是默认设置,但不幸的是,这并不像您希望的那样简单,因为您还必须使用相应的 64 位支持库。更多关于 here.

    话虽如此,如果您的矩阵本质上确实是稀疏的,则很有可能使用稀疏矩阵。如果没有,您实际上是在使用“大数据”,您需要找到解决方法,例如块处理/将大型数组映射到文件等。值得阅读常见的“大数据”技术。不幸的是,octave 似乎还不支持 matlab 的 memmapfile 命令,但您可以使用 fwrite / fread / fseek 适当地模拟这一点,以从文件中读取适当的范围。

    【讨论】:

    • Tatsuro 提供了一些带有实验性大阵列支持的非官方 Windows 构建 (tatsuromatsuoka.com/octave/Eng/Win) 据我所知,其他一些用户在线构建了 64 位 INDEXING。 Yannic 可能会查看邮件列表以查找讨论
    • 谢谢你非常详细的回答:)
    • 因此出现了很多,因为错误消息使人们认为他们正在达到内存限制。究竟是什么原因导致无法拆分此错误消息以便告知用户他或她执行了哪条错误消息?
    • 从 2018 年发布的 4.4 版开始,Octave 编译为 64,但如果操作系统支持,则默认支持索引,参见。 octave.org/doc/v4.4.0/…
    猜你喜欢
    • 2022-06-19
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多