微信号:djangoSpace

介绍:开发者平台

python VS matlab

2016-03-11 20:48 djangoSpace

遗传算法实现之pythonVSmatlab

在利用python实现算法之前,有一个不得不说的地方就是python的引用,用惯了matlab或者R的那种变量赋值方式为值的传递方式的人,再去用python的这种引用的方式来对变量赋值,肯定会觉得非常别扭,起码对于我个人来说就是这样,花了好长的时间才理解了python的变量传递机制,下面就说明一下,如果理解有偏差,还请大家指点指点!

总的来说就是,如果两个变量共同引用了一个对象,然后其中一个变量进行了‘父级’的操作时,两个变量的引用就分开了,如果其中的一个变量进行了‘子级’的操作时,这时两个变量共同引用的这个对象发生改变,但是两个变量还是引用这个对象,所以两个变量的引用还是绑定在同一个对象之上,只是这个对象发生了改变。

举个例子:

e.g.1

a = 1

b = a

b = 0

print a,b

程序运行结果:

1,0

a的结果没有因为b的改变而改变,b引用了aa引用了1这个值,所以b其实是引用了1,当b赋值为0的时候,b引用了0,但a还是引用了1,所以a还是1b0

e.g.2

a = [1,2,3,4,5]

b = a

a[0] = 0

print a,b

程序运行结果:

[0,2,3,4,5]

[0,2,3,4,5]

上面的结果是b随着a的改变又改变了,看起来是跟上面的有矛盾,其实没有,可以这样理解,a,b都引用了[1,2,3,4,5],但是a[0] = 0之后,a引用的这个列表就变成了[0,2,3,4,5],之前的列表[1,2,3,4,5]就不存在了,现在就只有[0,2,3,4,5]所以b也是引用了[0,2,3,4,5]

好了,现在进入正题,比较matllabpython实现的遗传算法的性能,在介绍具体比较结果之前,我们来看看官方给出的比较结果,图片是比较各种语言和julia的运行效率,julia语言的时间是实际时间,其他的都是相对于julia的倍数。

1


我们采用相同的目标函数f(x,y,z) = x^2+3*sin(x*y*z)+y^2-z^2,求解这个目标函数在x(-10,10),y(-10,10),z(-10,10)的范围内这个函数的最大值以及最大值所对应的x,y,z的坐标。matlab由于它的矩阵运算已经经过优化了,所以矩阵运算也是相当快的,python遗传算法的实现是基于numpy库的数组运算,下面来比较两个语言的效率,由于博主功力有限,可能没有按照两种语言的最高效率的方式编写程序,但是写完之后,两种程序的风格还是很相似的,循环运用的地方也基本相同。而这两中语言影响效率的地方基本都是在循环的运用,所以最后的效率比较应该是比较客观的。下面来看运行效果图:

 

matlab运行结果:


python的运行结果:


matlab使用了3.16s,python使用了1.68s,在这次的比较中可以看出来,基于numpy的遗传算法的效率几乎是matlab的一倍!也有可能是由于python将文件编译成了.pyc格式,从而加速程序了吧,由此看来python的效率不一定真的就很低,随着计算机硬件的发展,各种语言的效率的差距将会越来越小,而这时语言的通用性和可扩展性以及算法的实现效率将成为一种语言最大的竞争力。

关注微信公众号获取遗传算法实现之pythonVSmatlab源码及word版文档

3

 


 
djangoSpace 更多文章 为什么要学习julia这门语言? 遗传算法的matlab实现 [原]django构建简易博客系统 [原]python画词云图(电商评论数数据) BP神经网络算法之matlab具体实现
猜您喜欢 李彦宏:大数据技术已经到了变革临界点 Web开发的未来:React、Falcor和ES6 致歉:关于[Ruby 程序员]发布博文侵权一事! 一个故事讲清楚 NIO Xcare 系统软件支持服务,开启联想企业级无忧之旅----在线公开课