Yan*_*lem 2 memory windows matrix out-of-memory octave
我知道有3个问题有类似的异常消息.不幸的是,没有一个问题得到解答,评论无法解决我的问题.
我在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);
我不明白我做错了什么.有人能指出我正确的方向吗?
通常情况下,这个错误经常被误解(也许我们应该将此作为八度音阶跟踪器上的错误解决;))
>> 60000*60000
ans = 3.6000e+09
>> intmax
ans = 2147483647
>> 60000*60000 > intmax
ans = 1
Run Code Online (Sandbox Code Playgroud)
即,生成的60000x60000矩阵的元素数量大于系统支持的最大整数表示,因此无法使用整数索引对此类矩阵进行线性索引.
另外,为了使用实际的 64位索引,你需要以这种方式编译八度音程,因为这不是默认值,但不幸的是,这并不像你希望的那样简单,因为你必须使用相应的64位支持库也是如此.更多关于这一点.
话虽如此,如果你的矩阵确实是稀疏的,那么很可能会使用稀疏矩阵.如果没有,你实际上是在使用"大数据",你需要找到变通方法,例如块处理/将大型数组映射到文件等.值得阅读常见的"大数据"技术.不幸的是,octave似乎还不支持matlab的memmapfile命令,但您可以使用fwrite/ fread/ fseek适当地模拟这个来从文件中读取适当的范围.
| 归档时间: |
|
| 查看次数: |
4140 次 |
| 最近记录: |