Octave - 内存不足或维度对于 Octave 的索引类型来说太大
Octave - out of memory or dimension too large for Octave's index type
我知道有 3 个问题带有类似的异常消息。不幸的是 none 的问题得到了回答,评论无法解决我的问题。
我在 Windows 10 系统上使用 64 位版本的 Octave 4.2.1,总内存为 16 GB,运行时有约 11 GB 的空闲空间。
当我尝试将 60000 x 10 矩阵与 10 x 60000 矩阵相乘时,Octave 出现以下异常:
error: out of memory or dimension too large for Octave's index type
此乘法将产生 60000 x 60000 矩阵,因此对于 64 位索引应该不是问题。
我连zeros(60000,60000);
都做不到
我不明白我做错了什么。有人能指出我正确的方向吗?
通常情况下,这个错误经常被误解(也许我们应该把它作为八度跟踪器上的一个错误来解决;))
>> 60000*60000
ans = 3.6000e+09
>> intmax
ans = 2147483647
>> 60000*60000 > intmax
ans = 1
即生成的 60000x60000 矩阵的元素数量大于系统支持的最大整数表示,因此无法使用整数索引对此类矩阵进行线性索引。
此外,为了使用 actual 64 位索引,您需要以这种方式编译 Octave,因为这往往不是默认设置,但不幸的是,这不是默认设置正如您所希望的那样简单,因为您还必须使用相应的 64 位支持库。更多关于 here.
话虽如此,如果您的矩阵在本质上确实是稀疏的,则很可能改用稀疏矩阵。如果没有,您实际上是在使用 'big data',并且您需要找到解决方法,例如块处理/将大型数组映射到文件等。阅读常见的 "big data" 技术是值得的。不幸的是,octave 似乎还不支持 matlab 的 memmapfile
命令,但您可以使用 fwrite
/ fread
/ fseek
适当地模拟它以从文件中读取适当的范围。
我知道有 3 个问题带有类似的异常消息。不幸的是 none 的问题得到了回答,评论无法解决我的问题。
我在 Windows 10 系统上使用 64 位版本的 Octave 4.2.1,总内存为 16 GB,运行时有约 11 GB 的空闲空间。 当我尝试将 60000 x 10 矩阵与 10 x 60000 矩阵相乘时,Octave 出现以下异常:
error: out of memory or dimension too large for Octave's index type
此乘法将产生 60000 x 60000 矩阵,因此对于 64 位索引应该不是问题。
我连zeros(60000,60000);
我不明白我做错了什么。有人能指出我正确的方向吗?
通常情况下,这个错误经常被误解(也许我们应该把它作为八度跟踪器上的一个错误来解决;))
>> 60000*60000
ans = 3.6000e+09
>> intmax
ans = 2147483647
>> 60000*60000 > intmax
ans = 1
即生成的 60000x60000 矩阵的元素数量大于系统支持的最大整数表示,因此无法使用整数索引对此类矩阵进行线性索引。
此外,为了使用 actual 64 位索引,您需要以这种方式编译 Octave,因为这往往不是默认设置,但不幸的是,这不是默认设置正如您所希望的那样简单,因为您还必须使用相应的 64 位支持库。更多关于 here.
话虽如此,如果您的矩阵在本质上确实是稀疏的,则很可能改用稀疏矩阵。如果没有,您实际上是在使用 'big data',并且您需要找到解决方法,例如块处理/将大型数组映射到文件等。阅读常见的 "big data" 技术是值得的。不幸的是,octave 似乎还不支持 matlab 的 memmapfile
命令,但您可以使用 fwrite
/ fread
/ fseek
适当地模拟它以从文件中读取适当的范围。