Matlab Out of memory问题总结(一)【转帖】

不知道为什么论坛里没有关于 MATLAB 常见问题的一些总结贴,我在这里抛砖引玉了,希望各位高手能够不吝指教,多多发表自己对 MATLAB 使用的一些感悟和总结!



Out of memory 问题总结【原创】——最有效的方法



首先,我要声明, matlab 自带的 Help 才是最权威的 Matlab 学习资料 ,如果有时间 好好学习一下或是可以高效的使用的话,一定受益匪浅!比如说像 Out of Memory 这个问题,最开始我都是用 Help memory ,几乎得不到任何信息;然后就是去网上搜索此类问题的解决方法,一般有这几种:
除了升级内存和升级 64 系统 外,下面几个方法也是解决之道。
# 增加虚拟内存
# 采用 PACK (在命令输入 pack 整理内存空间)
# 采用 3GB 开关启动系统 ( 修改 c 盘根目录 boot.ini 启动选项加上 /3G 例如: multi(0)disk(0)rdisk(0)partition(1)/WINDOWS="Microsoft Windows XP Professional" /noexe cute=optin /fastdetect /3G
# 优化 程序 ,减少变量 (使用稀疏矩阵 sparse save 保存 变量 load 变量,需要时再读出来
# 如果必有必要,不要启动 java 虚拟机,采用 matlab -nojvm 启动 (在快捷方式属性里面的 "..../matlab.exe" 改为( "...../matlab.exe" - nojvm
# 关闭 Matlab Server  
# 使用 单精度 single 短整数替代 双精度。
现在看来这些解决方法对于我的问题来说根本就是“ 治标不治本 ”,不能解决实际问题,后来在一个师兄的提醒下 Help out of memory ,终于找到了解决此类问题的方法。在此感谢这位师兄啊!
重申―― Matlab Help 才是 Matlab 的最权威的指导材料!!!
其实我的所谓原创就是对 Help out of memory 的一些归纳总结而已,有兴趣的话大家可以自己去看!!!
问题一: Matlab 是如何存储矩阵的
Matlab 中矩阵是以 Block ,也就是块的形式存储的。也就是说,当 Matlab 在为即将存储的矩阵划分块时,如果没有相应大小的连续内存,即使实际内存没有被完全使用,他还是会报告“ Out of Memory ”。
问题二:如何高效使用 Memory
由于在使用的过程中,由于存储单元的不断的被分配和清除,内存会被分割成不连续的区域,这是很容易造成“ Out of Memory ”。
1.
为矩阵变量预制内存而不是动态分配
在动态分配的过程中,由于开始 Matlab 所用的 Block 随着矩阵的增大而连续的为此矩阵分配内存,但是由于 Block 的不连续性,很有可能最开始分配的 Block 不能满足存储的需要, Matlab 只好移动此 Block 以找到更大的 Block 来存储,这样在移动的过程中不但占用了大量的时间,而且很有可能它找不到更大的块,导致 Out of Memory 。而当你为矩阵变量预制内存时, Matlab 会在计算开始前一次性找到最合适的 Block ,此时就不用为变量连续的分配内存。
比较下面两个程序:

for k = 2:1000

x(k) = x(k-1) + 5;

end

x = zeros(1, 1000);
for k = 2:1000

x(k) = x(k-1) + 5;

end
显然,第二个更好!!! 最好的方法是,在程序一开始就位所有大的矩阵变量预制存存储单元!!!
2.


未完。。。
### 回答1: "MATLAB out of memory" 的意思是MATLAB程序使用了超过计算机可用内存的空间。这可能是由于处理过大的数据集或者不充分释放内存所导致的。要解决此问题,您可以尝试以下几个步骤: 1. 尝试释放一些内存。在MATLAB中,使用clear命令删除不再需要的变量,或使用pack命令对内存进行整理,以便MATLAB可以更好地管理可用内存。 2. 增加计算机可用内存。可以通过关闭其他占用内存的程序,或者添加更多内存到计算机中来实现。 3. 优化MATLAB代码。您可以使用更高效的算法和数据结构,以减少内存使用。 4. 将数据分批处理。如果您的数据集太大,无法一次处理,可以尝试将数据分成较小的块,并分别处理。 希望这些建议能帮助您解决MATLAB内存不足的问题。 ### 回答2: MATLAB的“out of memory问题通常发生在当计算机上的RAM不足以为正在运行的程序提供足够的内存时。这可能会发生在执行需要大量数据的操作(例如大型矩阵的操作或频繁的I/O操作)时,或者当运行时出现内存泄漏的情况时。 要解决“out of memory问题,可以尝试以下几种解决方案: 1.增加计算机的内存:如果计算机的RAM不足以为程序提供足够的内存,可以考虑增加计算机的内存大小,从而提高能够处理的数据量和程序性能。 2.清除内存:在MATLAB中,可以使用clear命令或者close all命令来释放内存。尽管这种方法不能解决整个内存不足的问题,但是它可以释放一些内存来继续执行程序。 3.使用稀疏矩阵:稀疏矩阵使用更少的内存来存储矩阵数据,并允许更快的计算速度。在操作数据时,可以将大型矩阵转换为稀疏矩阵,从而减少内存使用量。 4.使用前向斜杠:在执行矩阵求逆或解线性方程时,使用前向斜杠(\)运算符比使用逆(inv)函数更有效。这是因为前向斜杠使用更少的内存和计算时间。 5.优化代码:最后,可以通过优化代码来减少内存使用量。优化技术包括使用更少的变量、使用更少的循环、避免重复计算和使用更高效的算法等。 总之,“out of memory问题是一个常见的MATLAB问题,但是有许多方法可以缓解或解决这个问题。这些方法包括增加计算机的内存,清除不必要的内存,使用稀疏矩阵,使用前向斜杠和优化代码。 ### 回答3: MATLAB出现“out of memory”的错误,表示内存被耗尽,无法继续执行程序。解决该问题通常采取以下几种方法: 1. 增加计算机的物理内存:更换更大的硬盘、增加内存条等。 2. 优化程序:对于一些比较复杂、耗费内存的程序,考虑优化算法,减少不必要的内存占用。 3. 减少数据量:对于一些特别大的数据集,可以尝试只保留必需的数据,或者将数据分割成小块进行处理。 4. 使用分布式计算:使用多台计算机进行计算,分解任务,减轻单台计算机的内存压力。 需要注意的是,“out of memory”错误一般不是MATLAB软件本身的问题,而是计算机本身的限制。因此,更有效地解决这个问题需要同时考虑软件和硬件两方面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值