我意识到有3个问题有类似的exception信息。 不幸的是没有任何问题得到解答,评论无法解决我的问题。
我在64位版本的Windows 10系统上使用Octave 4.2.1,总共有16 GB RAM,运行时可以使用约11 GB的空间。 当我尝试乘以一个10×60000matrix的60000×10matrix八度出现以下exception:
错误:内存不足或维度太大,Octave的索引types
这种乘法会产生一个60000×60000的matrix,因此不应该是一个64位索引的问题。 我甚至不能做zeros(60000,60000);
我不明白我做错了什么。 有人能把我指向正确的方向吗?
通常情况下,这个错误经常被误解(也许我们应该把它作为八度跟踪器上的一个bug来解决)
>> 60000*60000 ans = 3.6000e+09 >> intmax ans = 2147483647 >> 60000*60000 > intmax ans = 1
即60000×60000矩阵的元素数目大于系统支持的最大整数表示,因此无法使用整数索引对这样的矩阵进行线性索引。
此外,为了使用实际的 64位索引,您需要以这种方式编译八度音阶,因为这往往不是默认的,但不幸的是,这并不像您所希望的那样直截了当,因为您必须使用相应的64位支持库也是如此。 更多在这里 。
话虽如此,如果您的矩阵实际上是稀疏矩阵,那么也可以使用稀疏矩阵。 如果不是的话,你基本上使用“大数据”,你需要找到解决方法,例如块处理/映射大型数组到文件等。值得关注一下常见的“大数据”技术。 不幸的是octave似乎还没有支持matlab的memmapfile
命令,但是您可以使用fwrite
/ fread
/ fseek
适当地模拟这个命令来从文件中读取适当的范围。