您的位置:首页 > 编程语言 > MATLAB

遗传算法实现之python VS matlab

2016-03-11 17:04 148 查看
说实话,之前由于听多了关于python性能不足方面的言论,深感python太慢,今天与matlab比较之后,顿时觉得python根本就不慢,然后回想起用python做过的应用,也没觉得性能有哪里差了,所以以后还是要自己亲自动手才会知道事情的真相!

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

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

举个例子:

e.g.1

a = 1
b = a
b = 0
print a
print b


程序运行结果:

1
0


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

e.g.2

a = [1,2,3,4,5]
b = a
a[0] = 0
print a
print 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]。

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



我们采用相同的目标函数
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版文档

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: