Windows 倍频程-内存不足或倍频程尺寸过大';s索引类型

Windows 倍频程-内存不足或倍频程尺寸过大';s索引类型,windows,matrix,memory,out-of-memory,octave,Windows,Matrix,Memory,Out Of Memory,Octave,我知道有3个问题有类似的异常信息。不幸的是,所有问题都没有得到回答,这些评论也不能解决我的问题 我在Windows10系统上使用64位版本的Octave 4.2.1,总内存为16GB,运行时可用内存约11GB。 当我尝试将60000 x 10矩阵与10 x 60000矩阵倍频程相乘时,会出现以下异常: 错误:内存不足或维度对于Octave的索引类型太大 此乘法将产生60000 x 60000矩阵,因此对于64位索引来说不应该是问题。 我甚至不能做零(60000) 我不明白我做错了什么。有人能给我

我知道有3个问题有类似的异常信息。不幸的是,所有问题都没有得到回答,这些评论也不能解决我的问题

我在Windows10系统上使用64位版本的Octave 4.2.1,总内存为16GB,运行时可用内存约11GB。 当我尝试将60000 x 10矩阵与10 x 60000矩阵倍频程相乘时,会出现以下异常:

错误:内存不足或维度对于Octave的索引类型太大

此乘法将产生60000 x 60000矩阵,因此对于64位索引来说不应该是问题。 我甚至不能做零(60000)


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

就像通常的情况一样,这个错误经常被误解(也许我们应该把它当作倍频程跟踪器上的一个bug来解决;)

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

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


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

Tatsuro提供了一些非正式的windows构建,并提供了实验性的大数组支持()据我记忆所及,其他一些用户有64位的在线索引构建。Yannic可能会查看邮件列表以找到DiskUsionThank you for you very detaily response:)因此出现了很多错误消息,因为错误消息使人们认为他们达到了内存限制。到底是什么原因导致无法拆分此错误消息,以便告诉用户他或她是哪个错误消息?从2018年发布的4.4版开始,Octave使用64进行编译,但如果操作系统支持,默认情况下支持索引,请参见。
>> 60000*60000
ans =    3.6000e+09
>> intmax
ans = 2147483647
>> 60000*60000 > intmax
ans = 1