Matlab使用过程中内存不足问题的总结

做图像处理的,对matlab这工具软件一定不会陌生,他的高集成度为图像处理提供了很大的方便,但我们在使用时难免会出现内存不足的问题,2、3G的内存还不够处理一次简单图像,这确实很恐怖。但这里的警告并不是说真的物理内存用完了,一般out of memenry存在以下几种情况:
1、 变量需要的存储空间超过了可用的内存空间
2、 数据需要的存储空间,超过内存中最大的可用连续存储空间
3 、程序和问题求解方法的设计不周,导致内存溢出

       个人认为,第一种出现情况最少,第二种出现情况应该是大众情况,第三种那我只能说你是个不太地道、不够细心的程序员,至少分配大点的地方给变量么!!下面就简单说下处理和应对方法:

       由于在使用的过程中,由于存储单元的不断的被分配和清除,内存会被分割成不连续的区域,这是很容易造成“Out of Memory”。

1、为矩阵变量预制内存而不是动态分配
       在动态分配的过程中,由于开始Matlab所用的Block随着矩阵的增大而连续的为此矩阵分配内存,但是由于Block的不连续性,很有可能最开始分配的Block不能满足存储的需要,Matlab只好移动此Block以找到更大的Block来存储,这样在移动的过程中不但占用了大量的时间,而且很有可能它找不到更大的块,导致Out of Memory。而当你为矩阵变量预制内存时,Matlab会在计算开始前一次性找到最合适的Block,此时就不用为变量连续的分配内存。
比较下面两个程序:
       (1)for k = 2:1000
                      x(k) = x(k-1) + 5;
                end
      (2)x = zeros(1, 1000);
                for k = 2:1000
                      x(k) = x(k-1) + 5;
                end
     显然,第二个更好!!!最好的方法是,在程序一开始就位所有大的矩阵变量预制存存储单元!!!

2、尽量早的分配大的矩阵变量
        Matlab使用heap method管理内存。当在Matlab heap中没有足够的内存使用时,它会向系统请求内存。但是只要内存碎片可以存下当前的变量,Matlab会重新使用内存。所在在大内存变量clear以后,新建的小内存变量仍可以使用那部分内存空间,但相反就不行了。比如说a变量4M,b、c、d、e分别为1M,如果a被clear以后定义bcde,则可以使用a的空间,如果clear b,c,d,e以后,假如这四个变量不是连续的,那么a就不能使用它们释放的内存。
3、尽量避免产生大的瞬时变量,当它们不用的时候应该及时clear

4、将矩阵转化成稀疏形式
    如果矩阵中有大量的0,最好存储成稀疏形式。稀疏形式的矩阵使用内存更少,执行时间更短。

5、使用pack命令
      当内存被分为很多碎片以后,其实本身可能有很大的空间,只是没有作构的连续空间即大的Block而已。如果此时Out of Memory,此时使用pack命令可以很好的解决此问题。

6、如果可行的话,将一个大的矩阵划分为几个小的矩阵,这样每一次使用的内存减少。

7、增大虚拟内存
     Windows XP,右键“我的电脑”->属性->高级->性能->设置,从而改变其虚拟内存。
      Windows 7,右键“计算机”->属性->(左边栏)高级系统设置->高级->(性能)设置->高级->(虚拟内存)更改,建议物理内存的两倍左右,如果物理内存已经3G+,那就不用调整了。

8、尽量少使用系统资源(对于Windows)
     Windows中字体、窗口等都是要占用系统资源的,所以在Matlab运行时尽量不要打开不用的窗口。

9、如果没有必要,不要启动java虚拟机,采用matlab -nojvm启动 (在快捷方式属性里面的 "..../matlab.exe") 改为("...../matlab.exe" - nojvm)

10、关闭Matlab Server


原文链接:http://blog.csdn.net/xiaojidan2011/article/details/8089532

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MATLAB,可以使用LU分解来求解稀疏矩阵的逆矩阵。LU分解是一种将矩阵分解为一个下三角矩阵L和一个上三角矩阵U的方法。对于大型稀疏矩阵,LU分解是一个比计算逆矩阵更快的方法,并且可以避免完整矩阵存储的内存问题。 另外,针对稀疏矩阵在MATLAB的存储问题,可以使用按行三数组存储的方式进行转换。这种方法首先对非零行元素按照从小到大的顺序进行排序,然后通过行遍历的方式将稀疏矩阵转换为按行三数组存储。这个转换过程的时间复杂度为O(n)。 总结起来,在MATLAB求解稀疏矩阵的逆矩阵可以使用LU分解的方法,并且可以采用按行三数组存储的方式进行优化。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SmartInv:大稀疏矩阵求逆。 返回块对角线、三对角线或五对角线元素。-matlab开发](https://download.csdn.net/download/weixin_38628626/19296639)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [matlab代码循环运行-SparseMatrix:在Matlab实现稀疏矩阵的存储和运算](https://download.csdn.net/download/weixin_38732744/18994436)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [在MATLAB创建、访问、修改和操作字符串数组(附详细步骤).txt](https://download.csdn.net/download/weixin_44609920/88239210)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值