`
kofsky
  • 浏览: 201776 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

最近修改代码(Matlab)的感受

阅读更多

     最近又对以前写过的柑橘溃疡病检测的代码作了很大的调整。主要集中在三个方面:分解功能模块、统一命名方式与调用方式、循环修改为矩阵运算。

     记录一些感受。望自己以后多加注意。

1、不要 在一个函数中集中太多的功能;如果功能模块能分解,那么,就尽最大努力的分解;函数功能愈单一愈好

         功能模块分解后能够最大限度的提高代码复用;

        调试时也方便许多

2、不要使模块过度灵活或者过度复杂;应该在灵活性与复杂度之间取一个合适的平衡;

        与第一个问题似乎差不多

        有一个时间段,总喜欢将函数做的非常复杂,希望能够完成好几种类似的功能;每次都采用matlab变参实现,变参多了,使得函数变得非常难以理解。

        比如,一个 AdaBoost  函数,它需要完成 AdaBoost 按轮数训练、AdaBoost 按特征数、AdaBoost 测试、同时训练并测试等类似的功能;以前做的就是把所有功能集成在一起;在现在看来,这是一个非常烂的设计。调试困难,调用时无法通过函数名知道其所需要的功能;并且,代码重用非常困难。

       在上一次的代码重构中,已经将这些分解了。但分解了仍然不够彻底。现在这个函数已经拆成七八块了。

       AdaBoostClassfy                     AdaBoost 强分类器对一组样本进行分类
       AdaBoostWeakLearnerClassfy AdaBoost弱分类器对一组样本进行分类
       searchBestWeakLearner      在特征列上获得最优的阈值分类器
       trainAdaBoostClassifier        在训练集上训练 AdaBoost 分类器
       testAdaBoostClassifier         在测试集上测试 AdaBoost 分类器
       testAdaBoost(训练与测试)    将样本随机划分为训练集与测试集,多次训练测试AdaBoost分类器
       AdaBoost(训练与测试)           给定训练集与测试集,训练测试AdaBoost分类器
 
       testAdaBoost 与 AdaBoost 类似,均是先训练分类器,而后测试分类器
       testAdaBoost 测试多次,并且将样本集分为训练集与测试集
       testAdaBoost 通过调用 AdaBoost 函数实现多次的分类器训练与测试
       AdaBoost调用 trainAdaBoostClassifier 训练, 调用 testAdaBoostClassifier 进行测试

      目前的设计不仅没有任何的重复代码,并且可扩充性也强许多。目前看来,还算一个不错的设计了。也许几个月后看,还存在许多问题。到时候再来解决吧。

3、形成一个习惯的命名方式,并严格执行

       变量命名:尽量采用全名

                           复杂对象(向量、矩阵、结构体、cell)首字母大写

                           简单变量(int,double)之类,首字母小写

                        比如:Samples      待分类的样本, cntSamples x cntFeatures 矩阵

                                       boostthresh  AdaBoost强分类器的阈值,默认为0.5

                         同一类型的变量采用同样的命名,比如数量前加:cnt,比如,

                                            样本数量:cntSamples  ;特征数量 cntFeatures 

      函数命名:  动词+名词 方式,尽量采用全名

                   比如:searchBestWeakLearner  在特征列上获得最优的阈值分类器 

                               trainAdaBoostClassifier    训练AdaBoost分类器

    统一命名方式后,结合注释,代码的可读性会大大提高。

4、循环尽量改为矩阵操作

         采用矩阵操作后代码会简洁许多,但会变得很难理解。需要增加注释,方便理解。 

5、归结几点:

      在完成功能的基础上

      可读性第一:就是要有良好的代码风格,比如注释良好而丰富、命名易理解、使用变量替换常数、代码缩进、不要写太长的嵌套调用、相关代码集中,等等等等

      可扩展性第二:变参需适量控制;函数功能单一;

      性能第三:最后考虑性能,matlab里面尽量采用矩阵替换循环

       

   

       血的教训!!多加注意!!!!!!!

       还约需要2.5周才能完成代码重构,任重而道远!!

分享到:
评论

相关推荐

    MATLAB实现TCN时间卷积神经网络时间序列预测(完整源码和数据)

    - 确保MATLAB版本与源码兼容,因为不同版本可能会有语法差异,如果遇到乱码问题,可以用文本编辑器(如记事本)打开代码并复制到对应版本的MATLAB环境中。 - 调整模型超参数以优化性能,例如学习率、膨胀系数、...

    SAR MATLAB

    在描述中提到,“SAR各种波形仿真MATLAB源码,而且会自动变化给人以直观感受”,这意味着该压缩包可能包含了多种SAR信号模型的MATLAB代码,这些代码不仅能够模拟不同的SAR波形,还可能具有交互性,用户可以通过调整...

    matlab开发-溃疡和疼痛指数和疼痛指数

    `license.txt` 文件通常是软件或代码的许可协议,规定了用户可以如何使用、分发和修改代码。在MATLAB开发中,遵循正确的许可协议是非常重要的,因为它确保了知识产权的尊重和合规使用。 在实际应用中,这样的MATLAB...

    matlab开发-Biorhythm

    `license.txt` 文件是软件许可协议,通常包含关于代码使用、修改和分发的法律条款。在MATLAB项目中,这可能意味着作者对代码的使用权和版权进行了规定,用户在使用代码前需要阅读并遵守这些条款。 在MATLAB中开发...

    Expection Maxmization demo matlab code

    你可以通过调试代码,观察不同迭代步骤下的结果,以直观感受算法如何逐步优化模型参数。此外,还可以尝试修改初始参数,或者增加混合成分数量,观察对模型拟合效果的影响。通过这样的实践,你将深化对EM算法及其在...

    PF经典matlab代码,程序集锦,经典论文复刻版,共享下,可能有参考价值

    标题中的“PF经典matlab代码”指的是粒子滤波(Particle Filter, PF)算法在MATLAB环境下的实现。粒子滤波是一种非线性、非高斯状态估计方法,广泛应用于信号处理、导航、图像识别和机器学习等多个领域。MATLAB作为...

    matlab开发-TrapezoidRuleDemonstration

    `license.txt` 文件通常包含软件的许可协议,详细规定了用户可以如何使用、修改和分发该代码。在MATLAB开发的项目中,了解许可协议是非常重要的,因为它决定了你能否在商业项目中使用这些代码,或者是否需要遵循特定...

    基于MATLAB_RTW和Vxworks的飞行模拟器实时仿真研究.pdf

    在飞行模拟器的仿真软件研发中,利用MATLAB/RTW生成在实时操作系统如VxWorks上独立运行的可执行C代码,可以大幅提高开发效率,减少开发周期,并降低成本。这一过程包括模型的构建、生成RTW文件、自动生成C代码、开发...

    基于matlab的理想低通滤波实验.zip

    在MATLAB中,我们可以使用`fftw`函数来进行快速傅里叶变换(FFT),将时域信号转换到频域,然后通过修改频谱来实现滤波。理想低通滤波器的实现通常包括以下步骤: 1. **读取图像**:使用MATLAB的`imread`函数读取含...

    digital image processing using matlab 书附带的源码&图片

    《数字图像处理使用MATLAB》是一本深入探讨图像处理理论与实践的教材,它结合了MATLAB这一强大的计算工具,为读者提供了丰富的实例和代码,帮助理解并掌握图像处理技术。MATLAB是一种广泛应用于工程计算、数值分析和...

    matlab新年快乐代码-libelas:利贝拉斯

    【标题】"matlab新年快乐代码-libelas:利贝拉斯" 指的是一份使用MATLAB编程语言编写的特殊代码,旨在庆祝新年,并且它与"libelas"相关。"libelas"通常指的是利贝拉斯(LibELAS),这是一个开源的、用于立体视觉中的...

    matlab开发-迭代复合函数TimeEscapeFractalExplorer

    "Iteration_complex_Map_Fractal_Explorer.m"是主程序文件,其中包含了实现分形探索逻辑的MATLAB代码。此文件可能包含了绘制分形图像的算法,如使用Julia集合的迭代公式,判断点是否逃离特定区域(逃逸时间),以及...

    基于matlab的数字信号处理课程设计

    在整个课程设计过程中,学生需要编写和调试MATLAB代码,实现滤波器的设计、语音信号的处理等功能。这不仅锻炼了他们的编程能力,也使他们更加熟练地掌握了MATLAB环境的使用。同时,通过实际运行和观察结果,学生能...

    直接序列扩频的MATLAB仿真,以及对应说明文档

    学习者可以通过阅读文档理解每一步的原理,并通过运行代码直观感受DSSS的工作过程。此外,通过修改参数和实验,可以进一步探索不同扩频码、调制方式、信道条件等对系统性能的影响。 总之,DSSS的MATLAB仿真不仅有助...

    matlab开发-单细胞可视动脉

    "simplecell_v3"这个文件可能是项目的源代码,其中包含了实现简单细胞模型的MATLAB脚本或函数。可能包括了滤波器的定义、输入信号的处理以及响应的计算等步骤。用户可以通过阅读和运行这个文件来观察模型如何处理...

    matlab开发-BeanMachine

    `license.txt`文件通常包含软件的授权信息,如MIT、GPL或Apache等开源许可协议,它规定了其他人使用、修改和分发该代码的规则。确保遵循这些条款,尊重作者的知识产权。 总结来说,MATLAB开发的Bean Machine项目是...

    用卷积滤波器matlab代码-TCSC:TCSC

    用卷积滤波器matlab代码地形卷积稀疏编码 这是拓扑卷积稀疏编码网络的实现,这是一种在末端具有额外线性层的卷积稀疏编码模型,这导致了滤波器的拓扑排序。 跑步 要运行程序: pip install - r requirements . txt ...

    【语音评价】语音质量客观评价(PESQ)含Matlab源码.zip

    该压缩包包含的Matlab源码,是实现PESQ算法的代码,这对于研究者和开发者来说非常有价值。通过理解并运行这些源码,可以深入了解PESQ的工作原理,并且可以将其集成到自己的语音处理项目中,进行语音质量的自动评估。...

    matlab.rar_dft-ifft_ifft_ifft matlab

    在MATLAB中,离散傅立叶变换(DFT)和逆...你可以通过运行代码,观察输入和输出,来直观地感受这两种变换的作用。此外,还可以尝试修改输入信号或参数,观察不同设置下的变换结果,从而加深对DFT和IFFT工作方式的理解。

    matlab迭代阈值代码-sparse-coding:PyTorch中OlshausenandField(96)的实现

    matlab迭代阈值代码稀疏编码 这是Olshausen和Field在PyTorch中稀疏编码纸的实现。 迭代收缩/阈值算法(ISTA)用于拟合输入的神经元响应。 接收场的梯度是通过PyTorh的autograd功能来计算的。 跑步 要运行程序: cd ...

Global site tag (gtag.js) - Google Analytics