Windows 如何修复10800x10800矩阵在Matlab中的内存不足错误?
情境:如何应对“走出困境” “内存”错误 基本上,问题是我使用10800x10800矩阵。我使用32位windows系统。 执行此操作时出现内存不足错误:Windows 如何修复10800x10800矩阵在Matlab中的内存不足错误?,windows,matlab,out-of-memory,Windows,Matlab,Out Of Memory,情境:如何应对“走出困境” “内存”错误 基本上,问题是我使用10800x10800矩阵。我使用32位windows系统。 执行此操作时出现内存不足错误: a=zeros(10800,10800); 这就是我的记忆: >> memory Maximum possible array: 393 MB (4.120e+08 bytes) * Memory available for all arrays: 1097 MB (1.150e+09 bytes) ** Memory
a=zeros(10800,10800);
这就是我的记忆:
>> memory
Maximum possible array: 393 MB (4.120e+08 bytes) *
Memory available for all arrays: 1097 MB (1.150e+09 bytes) **
Memory used by MATLAB: 639 MB (6.697e+08 bytes)
Physical Memory (RAM): 895 MB (9.387e+08 bytes)
* Limited by contiguous virtual address space available.
** Limited by virtual address space available.
系统:Windows 32位如果矩阵中有很大一部分将保持为零,请使用 如果不是这样(矩阵密集),您可以选择以下选项:
- 使用几个较小的矩阵分部分解决问题
- 使用具有大量内存的计算机,并使用大型密集矩阵
- 使用几个较小的矩阵分部分解决问题
- 使用具有大量内存的计算机,并使用大型密集矩阵
矩阵存储在连续的内存块中。当处理非常大的矩阵时,这些块的分配可能会有问题(仅仅因为可能找不到足够大的空闲内存块) 由于您没有提供有关代码的任何详细信息,因此我只能建议解决此问题的方法:
你考虑过使用稀疏矩阵吗?你的矩阵是933MB!这会让你产生一个自我解释的问题@fpe:实际上它是:
10800*10800*8/2^20=889.89MB
(即连续内存)。使用m=内存;m、 maxpossibleraybytes/2^20
查看您可以分配的矩阵有多大人们似乎认为您的矩阵基本上保持为零;这是真的吗?对于这个问题,你将使用你的矩阵做什么?好吧,你有,你有比你的内存允许更多的数据。所以唯一的问题是,你需要它在内存中同时可用吗?如果没有,则将其分解为子矩阵,并分别处理每个子矩阵,清除不再需要的旧数据。否则,移动到64位机器并购买更多RAM:)您是否考虑过使用sparse
矩阵?您的矩阵是933MB
!这会让你产生一个自我解释的问题@fpe:实际上它是:10800*10800*8/2^20=889.89MB
(即连续内存)。使用m=内存;m、 maxpossibleraybytes/2^20
查看您可以分配的矩阵有多大人们似乎认为您的矩阵基本上保持为零;这是真的吗?对于这个问题,你将使用你的矩阵做什么?好吧,你有,你有比你的内存允许更多的数据。所以唯一的问题是,你需要它在内存中同时可用吗?如果没有,则将其分解为子矩阵,并分别处理每个子矩阵,清除不再需要的旧数据。否则,移动到64位机器并购买更多RAM:)3)如果可能,使用单
而不是双
。这将把所需的内存减少一半(如:zero([1080010800],'single')
)@Amro:当然,如果可能的话,还可以使用更小的类型(logical
,int8
,…)。取决于OP课程的实际问题我编辑了我的原始帖子伙计们,请检查一下。显然,我的数组大小大于Matlab设置的限制。我如何增加这些?@user2225930您的编辑与其他人已经给您的解决方案无关。您可以选择迁移到64位操作系统+购买更多RAM、重写代码以使用块处理、使用智能数据类型。稀疏数组通常在填充的数组不到一半时比较方便。我在这里尝试对大矩阵进行矢量化,特别是在这里3)如果可能的话,使用single
而不是double
。这将把所需的内存减少一半(如:zero([1080010800],'single')
)@Amro:当然,如果可能的话,还可以使用更小的类型(logical
,int8
,…)。取决于OP课程的实际问题我编辑了我的原始帖子伙计们,请检查一下。显然,我的数组大小大于Matlab设置的限制。我如何增加这些?@user2225930您的编辑与其他人已经给您的解决方案无关。您可以选择迁移到64位操作系统+购买更多RAM、重写代码以使用块处理、使用智能数据类型。稀疏数组通常在填充的数组不到一半时比较方便。我在这里尝试对大矩阵进行矢量化,特别是在这里,它不是稀疏矩阵,稍后会用非零值填充。谢谢。顺便问一下,我可以修改Matlab使用了多少内存吗?我的意思是,我可以增加这些限制吗?看这里,它不是稀疏矩阵,它是ge
S = sparse(10800, 10800)