`
kofsky
  • 浏览: 197256 次
  • 性别: 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源程序代码MATLAB图像处理信号处理设计源码52个合集.zip

    MATLAB源程序代码MATLAB图像处理信号处理设计源码52个合集: MATLAB DCT水印源程序代码.rar MATLAB GUI实现动态画图曲线的源程序代码.rar MATLAB三次样条插值法 求信号的包络线 源代码.rar MATLAB中colorbar的设置 ...

    代码 马尔科夫链蒙特卡洛模拟的matlab源代码

    代码 马尔科夫链蒙特卡洛模拟的matlab源代码代码 马尔科夫链蒙特卡洛模拟的matlab源代码代码 马尔科夫链蒙特卡洛模拟的matlab源代码代码 马尔科夫链蒙特卡洛模拟的matlab源代码代码 马尔科夫链蒙特卡洛模拟的matlab...

    代码 随机动态规划的实例的matlab代码

    代码 随机动态规划的实例的matlab代码代码 随机动态规划的实例的matlab代码代码 随机动态规划的实例的matlab代码代码 随机动态规划的实例的matlab代码代码 随机动态规划的实例的matlab代码代码 随机动态规划的实例的...

    K-最近邻算法 matlab代码

    使用K-最近邻算法对三类样本进行分类的matlab代码

    MATLAB源代码MATLAB源码大集合220MB上千个源码文件.zip

    MATLAB源代码MATLAB源码大集合220MB上千个源码文件: 2013全国大学生数学建模B题matlab代码.rar 802.11a OFDM MATLAB仿真代码!(推荐).rar MATLAB DCT水印源程序代码.rar MATLAB GUI 实例.rar matlab GUI实例.rar ...

    模糊熵MATLAB代码

    模糊熵MATLAB代码模糊熵MATLAB代码模糊熵MATLAB代码模糊熵MATLAB代码模糊熵MATLAB代码模糊熵MATLAB代码模糊熵MATLAB代码

    10大经典算法matlab代码以及代码详解

    10大经典算法matlab代码以及代码详解10大经典算法matlab代码以及代码详解10大经典算法matlab代码以及代码详解10大经典算法matlab代码以及代码详解10大经典算法matlab代码以及代码详解10大经典算法matlab代码以及代码...

    PCA 主成分分析代码 MATLAB版

    PCA 主成分分析代码 MATLAB版 PCA 主成分分析代码 MATLAB版 PCA 主成分分析代码 MATLAB版

    机器学习matlab源代码.rar

    机器学习matlab源代码机器学习matlab源代码机器学习matlab源代码机器学习matlab源代码机器学习matlab源代码机器学习matlab源代码机器学习matlab源代码机器学习matlab源代码机器学习matlab源代码机器学习matlab源代码...

    散布熵matlab代码

    散布熵matlab代码散布熵matlab代码散布熵matlab代码散布熵matlab代码散布熵matlab代码散布熵matlab代码散布熵matlab代码散布熵matlab代码散布熵matlab代码

    基于Matlab的卫星轨道仿真(源代码).zip

    基于Matlab的卫星轨道仿真(源代码) 基于Matlab的卫星轨道仿真(源代码) 基于Matlab的卫星轨道仿真(源代码) 基于Matlab的卫星轨道仿真(源代码) 基于Matlab的卫星轨道仿真(源代码) 基于Matlab的卫星轨道...

    MATALB.zip_matlab 代码大全_matlab代码大全

    图像处理的代码大全,从文档中可以学到很多关于matlab的代码

    代码 各种离散优化方法的matlab程序

    代码 各种离散优化方法的matlab程序代码 各种离散优化方法的matlab程序代码 各种离散优化方法的matlab程序代码 各种离散优化方法的matlab程序代码 各种离散优化方法的matlab程序代码 各种离散优化方法的matlab程序...

    近似熵MATLAB代码

    近似熵MATLAB代码近似熵MATLAB代码近似熵MATLAB代码近似熵MATLAB代码近似熵MATLAB代码

    imu的matlab代码

    imu的matlab代码

    极限学习机matlab代码

    极限学习机matlab代码,极限学习机matlab代码,极限学习机matlab代码极限学习机matlab代码,,极限学习机matlab代码,极限学习机matlab代码

    高斯伪谱法matlab代码

    高斯伪谱法matlab代码高斯伪谱法matlab代码高斯伪谱法matlab代码高斯伪谱法matlab代码高斯伪谱法matlab代码高斯伪谱法matlab代码高斯伪谱法matlab代码高斯伪谱法matlab代码高斯伪谱法matlab代码高斯伪谱法matlab代码...

    代码 模糊综合评价原理案例讲解与Matlab实现

    代码 模糊综合评价原理案例讲解与Matlab实现代码 模糊综合评价原理案例讲解与Matlab实现代码 模糊综合评价原理案例讲解与Matlab实现代码 模糊综合评价原理案例讲解与Matlab实现代码 模糊综合评价原理案例讲解与...

    Apollo Control代码改写成Matlab代码

    将Apollo控制代码改写成Matlab代码,并编写相应的车辆横纵向动力学模型,可在matlab中进行控制模块的横纵向仿真调参,也可作为学习Apollo 控制代码的资料。

    粗糙集详细matlab代码

    粗糙集详细matlab代码粗糙集详细matlab代码粗糙集详细matlab代码粗糙集详细matlab代码粗糙集详细matlab代码粗糙集详细matlab代码

Global site tag (gtag.js) - Google Analytics