PYTHON VS MATLAB VS VB(VBA)

这是我人生中第一个博客,简单介绍下自己,坐标魔都某985,新入学的研究生,目前需要开展的研究很多是基于大(样本)数据的,所以对自己编程是在不断抓紧,希望能赶上学院、学校、CSDN等大佬们的脚步,今天主要是想和大家分享下入门编程(kuhai)的感悟,面向数据、算法、编程的新人们。
以后我慢慢谈到像神经网络、支持向量机、自动编码机、RNN、CNN、决策树、随机森林、强化学习Q-learning等目前比较火热的深度(机器)学习算法。
他们并不神秘,虽然我以前觉得很高大上,其实这些本质上基本都是无非就是用模拟简单人脑系统后对非超参数基于数据样本集随机寻优的算法罢了,对于网络节点数、层数等超参数都很多是需要自己试算或者经验值拟定。不过今天我的主题是不同编程语言的对比与选择。

毫无疑问目前在编程领域的最火热的就是PYTHON了,一种超级灵活面向对象的脚本语言。不过对于程序员而言,什么是最优秀的编程语言,问1000个人你可能会收到1000个答案。现在我的Blog面向的是工科学生,往往也会遇到编程语言的选择,我谈下我的体会。
没有最好的,只有面对任务时,最合适或者较为合适的编程语言!!!!
没有最好的,只有面对任务时,最合适或者较为合适的编程语言!!!!
没有最好的,只有面对任务时,最合适或者较为合适的编程语言!!!!

在这里插入图片描述

PYTHON

是目前很受欢迎的语言,思想就是代码简洁,语法简洁超乎想象。对于其他编程语言都需要特征代码(如end if 、end function )来分隔代码结构,其直接用缩进对齐做到分段。已经学过其他编程语言同学初期并不适应,主要的变量是列表、元组、字典,且可谓是无处不对象。其中对于对象的使用可谓是给了编程人员超级自由度去开发,对对象方法和属性的封装也趋近完美,比如神经网络中的隐含层、多层降噪自动编码机里的整体网络类对象(Class stacked_AUTOENCODER():)可以直接定义特有的属性与方法,无需再搞出一堆不统一且多元的变量/函数来表示。。环境由于开源,目前已经有很多代码包可以调用,无序自己开发,如numpy 、panda、opencv、matplotlib、wordcloud等。对于初学者推荐可以去看鱼C的小甲鱼的视频。还有就是其代码运行环境兼容性好,WINDOW 、LINUX、MAC等不同系统环境都可以hold住,不用在重新编写,其底层语言是基于C语言的。一般推荐使用PYTHON3.0以上版本哦
不过仅靠PYTHON本身也有问题,一是较MATLAB,直代数运算的运算速度慢,二是版本更新快需要的函数包众多,不易于管理,博主就常遇到一个包并不能兼容版本,安装时常报错。有时候需要升级才可以解决,甚至不能解决。不过这个可以被PYCHARM、ANACONDA软件所基本解决,二者的包还可以共享,安利哦。每个介绍我都放了一些程序代码。所以要创新、对偷懒少敲代码的同学多考虑。

def sig(x):
    '''sigmod函数
    input::x(mat):feature*x
    output:sigmoid值
    '''
    return 1.0/(1+np.exp(-x))

def lr_train_bgd(feature,label,maxcycle,alpha):
    '''
    out:w(mat)权重

    '''
    n=np.shape(feature)[1]
    w=np.mat(np.ones(n,1))
    i=0
    while i<=maxcycle:
        i+=1#迭代次数
        h=sig(feature*w)
        err=label-h
        if i%100==0:
            print( "\t---------iter=" + str(i) + \
            " , train error rate= " + str(error_rate(h, label)))
            w=w+alpha*feature.T*err #权重修正
    return w


def error_rate(h,label):
    '''
    '''
    m=np.shape(h)[0]
    sum_err=0.0
    for i in range(m):
        if h(i,0)>0 and (1-h(i,0))>0:   #存在误差
            sum_err-=(label[i,0]*np.log(h[i,0])+(1-label[i,0])*np.log(1-h[i,0]))
        else:
            sum_err-=0.0
    return sum_err/m

MATLAB

一般而言作为工科理科的童鞋,本科没学、研究生就一定会学要用。一般用它做数学建模、信号处理分析、项目程序它是首选,可谓是这块的老熟人+大哥,网上基于MATLAB的算法代码数量估计是.py文件的好几倍吧。它是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。如其名非常善于矩阵运算,对于数据维度基本没限制,对单个变量存储的存储一般的字节数、内存单元都基本没有上限(如10000)。一般编程使用变量有 结构、类、数组、矩阵等,变量使用前和PYTHON一样均无需现行定义。几十、几百兆的.mat数据、.xls、.txt、.jpg、甚至视频的处理都能很轻松。其特色是向量化、用 for循环结构反而会拖累其运算速度。如不可向量化,则最好预分配空间。其内置的匿名函数eval\feval在处理大规模变量文件导入输出时非常有用!!!一个贴心的功能就是可以存储当前工作区域的变量到.mat文件,再次打开都无需在运行知己双击打开即可节省时间。如果要做深度学习,如构建BP神经网络等,也是没啥大的问题了。对了涉及到函数拟合、小波分析、数值积分、遗传算法、神经网络基本都可以使用现成的工具箱,甚至一句语句就可以了。编程工具只是手段,大道殊途同归,一个任务下任何编程语言代码的思想都是一样的。
不过作为学习了5年(其实几个月吧)的资深CODER,我觉得其有很多缺点(划重点啦)

  1. 安装包过大,2015a/b版的安装包就是7G以上,而且需要破解,安装很费时间、占用内存大,此处土豪请无视。
  2. 不开源,给定的版本就只具有特定功能,尽管功能基本很完备了,但算法和数据结构日新月异,对不存在的部分就只能自己coding喽。
  3. 面向对象有待提高,脚本字体不美观,而且完成一个东西一次要写好几个脚本/函数文件。SIMULINK的交互性不及VB呢。
  4. 对象方法等封装性不好。一方面,所有的变量均保存在公共工作区中,任何语句都可以调用。另一方面,作为一个完备的软件,而不是实现算法的程序,编程人员在使用MATLAB时需要花相当多的时间考虑如何设计用户界面。虽然,MATLAB提供了一定量的交互界面制作途径,但最终的代码仍然将不可避免的移植到较为“低级”的语言中,如C语言、C++。
function childrenChrom = Crossover(parent, pCrossover)
    [PopNum, bit] = size(parent.chrom);
    childrenChrom = [];
    %[M, I] = max(parent.fitness);
    %childrenChrom = parent.chrom(I, :); %Parent with highest fitness
    for i = 1 : PopNum/2
        RandCross = rand(1);
        if RandCross < pCrossover
            i = fix(rand(1)*PopNum + 1);
            j = fix(rand(1)*PopNum + 1);
            while i == j
                i = fix(rand(1)*PopNum + 1);
                j = fix(rand(1)*PopNum + 1);
            end 
            BreakPoint = fix(rand(1)*bit + 1);
            temp = parent.chrom(i, 1:BreakPoint);
            parent.chrom(i, 1:BreakPoint) = parent.chrom(j, 1:BreakPoint);
            parent.chrom(j, 1:BreakPoint) = temp;
            childrenChrom = [childrenChrom; parent.chrom(i, :); parent.chrom(j, :)];
        end
    end
end

VB(VBA)

VB是一种由微软公司开发的包含协助开发环境的事件驱动编程语言。从任何标准来说,VB都是世界上使用人数最多的语言——不仅是盛赞VB的开发者还是抱怨VB的开发者的数量。VB拥有图形用户界面(GUI)和快速应用程序开发(RAD)系统,可以轻易的使用DAO、RDO、ADO连接数据库,或者轻松的创建ActiveX控件。程序员可以轻松的使用VB提供的组件快速建立一个应用程序。内置超级多的控件与空间属性,面对对象编程友好性很高。
但我更想介绍的是VBA。它是面向EXCEL的内置开发的环境。如果你每日做的是着针对EXCEL的重复操作,那么学会学好VBA是能拯救你于水深火热之中。快的话可以十几分钟一次性处理几千个.xls文件。

当你拿到的EXCEL文件中数据是超级不规则,离散、缺失的时候,而且数量又达到了几百几千几万个,那么无论是PYTHON、还是MATLAB、哪怕是宏都将失效。如果不想KEEP CLICKING ,那么visual basic for application,非常可能是你唯一且最佳选择。
主要有单元格cell、工作簿thisworkbook、工作表对象activeworksheet。注意只有.xls或者.xlsm文件可以储存VBA代码,.xlsx则不行,这让我有时觉得很坑。里面的逐句运行调试F5功能可谓是新手们的福利。
缺点的话,就是变量使用一般就必须声明dim/PUBLIC,这样利于管理、由于有模块、类模块、进程之分、这块可能很多人不适应,使用option explicit 就是强制显式声明变量。对于BUG的调试往往不友好,我初学常常被这块闹心啊,错误29 下表越界。。。。对了,它不区分大小写,MATLAB PYTHON
可不会这么“脸盲”哦。
其代码块的分隔语句多样,end if、end function、end sub 。

想学习的同学可以下载我的那个资源(含有百度云永久链接)

errorsheet:
    resultdata(1) = 0
          resultdata(2) = 0
             resultdata(3) = 0
                resultdata(4) = 0
    
'workbk.Delete   '删除工作簿对象节省空间

'存入数据文件
  j = 1 '导入数据的赋值再利用计数器
  ThisWorkbook.Worksheets("Sheet1").Activate
  Range("A1").Activate

   For j = LBound(resultdata) To UBound(resultdata)
       ActiveCell.Offset(nfile, j).Value = resultdata(j)
        Next
        
  ThisWorkbook.Worksheets("Sheet1").Columns.AutoFit
  'Application.ScreenUpdating = False

Msgbox 新年快乐,各位CODERS!!!
  
发布了4 篇原创文章 · 获赞 7 · 访问量 770

猜你喜欢

转载自blog.csdn.net/qq_34027291/article/details/85501331
VS