目录

  • 一、问题分析
    • 报错信息翻译:
  • 二、问题分析
    • 1.官方文档分析
  • 三、扩展实验
    • 实验1
    • 实验2

一、问题分析

首先查看报错信息:

报错信息翻译:

指示的变量或数组的大小似乎随着每次循环迭代而改变。 通常,出现此消息是因为阵列通过分配或连接而增长。 通过分配或连接来增长阵列可能很昂贵。 对于大型数组,MATLAB必须分配一个新的内存块,并在进行每次赋值时将较旧的数组内容复制到新数组中。 以这种方式更改变量大小的程序可以将大部分运行时间花在这种低效的活动上。

出于同样的原因,在缩小数组或在每次迭代中改变变量的大小时会产生很大的开销。
大概意思是说,再循环体中不断扩大数组的大小操作,因为每次扩充数组大小都要进行一次内存大小判断(内存不够时还要进行内存扩充),这两个过程是非常耗时的,所以软件不建议在循环体中更改数组大小。这是问题所在。

二、问题分析

1.官方文档分析

这个问题在MATLAB官方文件中也提到了
【MATLAB 如何分配内存】
https://ww2.mathworks.cn/help/matlab/matlab_prog/memory-allocation.html

MATLAB官方给出的解决方案是:在使用这个数组之前先自己判断数组最大是多少,定义数组时先定义个足够大的零数组,然后再使用该数组。官方称之为:预分配。
【预分配】
https://ww2.mathworks.cn/help/matlab/matlab_prog/preallocating-arrays.html
在【预分配】文档中的两个例子中,使用之前没有定义足够大小变量的例子,MATLAB会报错,虽然报错,但也可以运行(由此看来是风险性报错),只是执行速度较慢
Elapsed time is 0.301528 seconds.

使用之前已经定义足够大小变量的例子不会报错,执行速度比上个例子快
Elapsed time is 0.011938 seconds.

总结1:由此可以看出,当提示这种错误时,若自知该程序占用内存以及时间在可接受范围内,且不知应定义多大的数组空间时,可以忽略该错误。不过建议在使用之前先定义足够大的变量

三、扩展实验

因为官方文档给出的是只要变量自身迭代才会报错,所以可以多使用一个函数避免自身迭代来避免该问题,如下:

实验1

将源代码提取小的实验代码如下:

报错,可以正常运行,运行结果正确,运行时间如下:

实验2

将代码改成如下:

不报错,运行时间约等于实验1,如下:

总结2:可以通过多定义一个变量避免数组迭代来消除MATLAB的报错,其实实验1与实验 2在执行过程中,内存变化情况都完全相同,当将一个数组赋值给另一个变量时,不会为新变量分配内存,新变量只是到原来数组的引用,直到新变量中元素值改变时,才会为其分配内存。两个实验数组变化次数相同,其内存变化次数必定相同,使用时间必定相同。

【实验结论引用】
http://blog.sina.com.cn/s/blog_62195b800101iqlg.html

【MATLAB】变量似乎会随迭代次数而改变,请预分配内存以获得更高的运算速度。相关推荐

  1. matlab 运行报错:变量似乎随迭代次数而改变,请预先分配内存空间以加快运算速度 解决方式

    目录 一.问题分析 报错信息翻译: 二.问题分析 1.官方文档分析 三.扩展实验 实验1 实验2 一.问题分析 首先查看报错信息: 报错信息翻译: 指示的变量或数组的大小似乎随着每次循环迭代而改变. ...

  2. matlab中增大迭代次数,贝叶斯优化matlab

    当我们遇到的一个最优化问题,但是目标函数不知道,或者说目标函数是类似于黑盒子,很难用数学公式/程序写出来时,此时想要求得目标函数的极值,可以使用贝叶斯优化,其主要的适用的情景是维数不超过20维,目标是 ...

  3. 神经网络的迭代次数是一个线性的变量吗?

    每个神经网络对应每个收敛标准δ都有一个特征的迭代次数n,因此可以用迭代次数曲线n(δ)来评价网络性能. 如果一个神经网络对图片1的迭代次数是n1对图片2的迭代次数是n2,做一个网络向网络输入50%的1 ...

  4. 基于MATLAB的LDPC编译码误码率仿真,仿真调制为64QAM,对比不同译码迭代次数

    目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 LDPC码是麻省理工学院Robert Gallager于1963年在博士论文中提出的一种具有稀疏校验 ...

  5. 用矩阵内积的办法构造迭代次数受控的神经网络1:0.6:0.1=4:3:2

    每个神经网络对应每个收敛标准δ都有一个特征的迭代次数n,因此可以用迭代次数曲线n(δ)来评价网络性能. 一个二分类网络,分类两个对象A和B,B中有K张图片,B的第i张图片被取样的概率为pi,B中第i张 ...

  6. 用矩阵点积的办法构造神经网络的迭代次数1:0.6:0.1=1:1:1

    每个神经网络对应每个收敛标准δ都有一个特征的迭代次数n,因此可以用迭代次数曲线n(δ)来评价网络性能. 一个二分类网络分类两个对象A和B,B中有K张图片,B的第i张图片被取样的概率为pi,B中第i张图 ...

  7. 用神经网络迭代次数曲线模拟原子光谱

    大量实验表明每个神经网络对应每个收敛标准δ都有一个特征的迭代次数n,因此可以用迭代次数曲线n(δ)来评价网络性能. 一个二分类网络分类两组对象A和B,B中有K张图片,B的第i张图片被取样的概率为pi, ...

  8. 用数学方法构造神经网路的迭代次数1-9

    神经网络对应每个收敛标准δ都有一个特征的迭代次数n,因此可以用迭代次数曲线n(δ)来评价网络性能. 一个二分类网络分类两组对象A和B,B中有K张图片,B的第i张图片被取样的概率为pi,B中第i张图片相 ...

  9. 用两个矩阵的点积计算神经网络的迭代次数 2-8

    每个神经网络对应每个收敛标准δ都有一个特征的迭代次数n,因此可以用迭代次数曲线n(δ)来评价网络性能. 在<神经网络的迭代次数是一个线性的变量吗?>中得到表达式 一个二分类网络分类两个对象 ...

最新文章

  1. 流程图软件draw.io
  2. GDCM:gdcm::ImageReader的测试程序
  3. 01-hibernate注解:类级别注解,@Entity,@Table,@Embeddable
  4. java 判断数字变化增减_java String 强化操作 判断数字 字符串转阿拉伯数字,相似度等等...
  5. LeetCode 题 - 88. 合并两个有序数组
  6. ubuntu drbd双机互备
  7. Eclipse 生成 Jar 包
  8. ai的预览模式切换_当AI频繁切换色彩预览模式时 颜色会越变越深 求解?
  9. 实习成长之路: MySQL三 : 事务隔离:为什么你改了我还看不见?
  10. EditPlus3破解版下载以及配置java使用教程
  11. 笔记:C# log4net App.config 配置系统未能初始化问题的一种处理方法
  12. dell bios 恢复出厂设置
  13. 关于private继承
  14. dva是什么游戏_Dva爱你哟 她原来就是韩国少女宋哈娜原型
  15. python在线办公自动化oa系统django408
  16. 80年代后最佳阵容之巴西篇
  17. xmapp无法启动Apache、Tomcat无法启动问题解决
  18. 无人酒店开业、无人车上路,不被时代抛弃,看懂这2点
  19. 中国历史年代尺-夏商至民国
  20. Android系统定制源码修改 - MTK平台

热门文章

  1. 关于centos安装最新的firefox出现的问题GLib-GObject-CRITICAL **
  2. charles的简单使用
  3. 猿创征文|2022年前端之路——我的前端开发好帮手
  4. dperf: 一款基于DPDK的千万级HTTP CPS的开源网络压力测试仪
  5. python统计中英文字符_如何统计文本中的中英文字符数?Python帮你解决
  6. android进入相机不显示缩略图,无法显示图片,缩略图可以
  7. 无线广播相关信号(收音机)的发射与接收
  8. 成语接龙(英语单词链)
  9. 【金猿产品展】Smartbi一站式大数据分析平台——一个平台、所有数据、无限可能。...
  10. 站长如何打造个人品牌