matlab 内存拷贝_科学网—Matlab编程之预分配内存 - 赵丽莉的博文

在Matlab中,预分配内存可以显著提高for循环的执行速度,避免频繁的数组扩容操作导致的性能下降和内存消耗。通过使用zeros、ones或cell函数预先分配空间,可以减少内存查找和移动的时间。此外,使用`for n = len : -1 :1`的循环写法也能实现预分配效果,避免内存不足的问题。了解和应用这些技巧,能有效优化Matlab程序的内存管理和性能。
摘要由CSDN通过智能技术生成

Matlab2017a版本,编写for循环程序时,经常提示对变量进行preallocation memory(预设内存)的提示,在matlab自带帮助文档中,有如下具体解释,同时提供了实例:用zeros或ones函数预定义变量。

forandwhileloops that incrementally increase the size of a data structure each time through the loop can adversely affect performance and memory use. Repeatedlyresizing arraysoften requires MATLAB®to spend extra time looking forlarger contiguous blocks of memory,and then moving the array into those blocks.Often, you can improve code execution time by preallocating the maximum amount of space required for the array.

The following code displays the amount of time needed to create a scalar variable,x, and then to gradually increase the size ofxin aforloop.

ticx = 0;for k = 2:1000000   x(k) = x(k-1) + 5;endtoc

Elapsed time is 0.301528 seconds.

If you preallocate a 1-by-1,000,000 block of memory forxand initialize it to zero, then the code runs much faster because there is no need to repeatedly reallocate memory for the growing data structure.

ticx = zeros(1, 1000000);for k = 2:1000000   x(k) = x(k-1) + 5;endtoc

Elapsed time is 0.011938 seconds.

Use the appropriatepreallocationfunction for the kind of array you want to initialize:zerosfor numeric arrays

cellfor character arrays

另有中文资料(来自ilovematlab网站)特别推荐for n = len : -1 :1 的这种for循环写法,即不需要zeros() 之类的先开内存,也可以达到预分配内存的效果。该网页也列举了matlab内存管理机制的内容,如下:

主要的问题来自于matlab的内存管理机制:

对于一个数组,matlab先在内存中找一块放得下的连续空间,如果这个数组一直增大到那个连续空间放不下了,matlab会去找另外一个放得下的连续空间(好像记得在什么地方听到过是找一个原来内存2倍大的地方),这样就带来2个问题:

1. 额外的操作,找内存 + 复制; 而且这种操作有可能是很多次。

2.  额外的空间,这个时候有2份copy在内存中。导致内存不足的常见原因之一

网页最后提供了两个实例,考虑博文长度,本文未重复列出。

转载本文请联系原作者获取授权,同时请注明本文来自赵丽莉科学网博客。

链接地址:http://blog.sciencenet.cn/blog-237238-1093951.html

上一篇:matlab 主成分分析warning

下一篇:摘抄:顾炎武 《与友人书》

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信6博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信6博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值