百摩网
当前位置: 首页 生活百科

julie和julia(速度慢怕复杂9012年过去了)

时间:2023-08-04 作者: 小编 阅读量: 2 栏目名: 生活百科

目前其追随者和使用其的开发人员日益增多。Julia广泛支持线程和同步旨在最优化性能、降低竞争风险。综上,Julia是数据科学和机器学习工作的最佳选择,两者原因大致相同,即它在数值快速计算方面最为适用。这一问题存在诸多争议。其中权值、特征和偏差向量的线性组合必须超过某个阈值才能传播到下一层。平均花费时长超过1秒钟。

全文共3967字,预计学习时长12分钟

图源:Unsplash


Julia是什么?


“操作似Python,运行如C语言”。


没错,这就是Julia素有的口号。


Julia作为一种现代编程语言,主攻科学计算,它是一种灵活的动态型语言,其性能可与传统的静态型语言相媲美。目前其追随者和使用其的开发人员日益增多。


Julia试图提供一种单一环境,此环境的生产能力足以进行原型设计,并能有效地应用于工业级应用程序。它是一种多范式语言,其中包含函数式和面向对象式编程组件,尽管大多数的用户都喜欢其函数式编程的功能。


该编程语言的起源可追溯至2009年。首席开发人员Alan Edelman、Jeff Bezanson、Stefan Karpinski和Viral Shah着手创建该语言,以用于更快更好的数值计算。2012年2月,开发人员发布了该语言的一个商业版本。


为什么Julia对数据科学而言如此优越?


Julia是数据科学和机器学习工作的最佳选择,两者原因大致相同,即它在数值快速计算方面最为适用。优点如下:

· 平滑的学习曲线和大量的基础功能。特别是,如果你已经很熟悉如Python、R语言等更为热门的数据科学语言后,学习Julia就好似在公园中散步一样容易。

·性能:Julia最初是一种编译语言,而Python和R语言是解释语言。这就意味着Julia代码以可直接处理代码的形式在处理器上运行。

· GPU支持:这与性能直接相关。GPU支持由某些软件包,如TensorFlow.jl和MXNet.jl公开控制。

· 分布式和并行式计算支持:Julia使用多种拓扑公开执行并行式与分布式计算。它还支持协同程序,比如在GO编程语言中,协同程序是在多核架构中并行工作的辅助函数。Julia广泛支持线程和同步旨在最优化性能、降低竞争风险。

· 丰富的数据科学与可视化库:Julia社区认为其是数据科学家和统计学家的首选语言。因此,主攻数据科学与分析的高性能库一直处于开发状态。

· 团队合作(与其它语言/框架共同使用):在数据科学和机器学习领域,Julia和其它成熟语言及框架的兼容性相当好。使用PyCall或RCall可以在Julia脚本中使用本地Python或R语言代码。Plots包可以与包括Matplotlib和Plotly的各种端协同工作。Scikit-learn或TensorFlow等热门机器学习库已经具有类似Julia的语言或包装器。

· 用户友好的界面:不论是在本地还是云上,Julia 的用户界面都非常友好,在所有的流程中,用户与 Julia 的交流都非常顺畅。Julia 还对所有的功能和数据类型提供了方便易用的帮助文件。

· 与其他语言无缝对接:这些语言包括(但不限于)R、Python 和 C。这使你不需要进行完整的迁移,就可以使用现有的代码库。


综上,Julia是数据科学和机器学习工作的最佳选择,两者原因大致相同,即它在数值快速计算方面最为适用。


具体案例与比较,Julia优势一目了然


使用Python脚本进行基准测试


有关“Julia比Python速度快吗?”这一问题存在诸多争议。


与生活中其它事情类似,答案是:视情况而定。


图源:Unsplash


官方Julia语言门户网站上有些相关数据,尽管基准测试是针对Python以外的各种语言进行的。


事实上,这个问题总是认为人们所谈论的是Julia与某种优化/矢量化Python代码(如Numpy函数所使用的)之间的对比。否则,本地Julia由于执行编译代码,速度几乎总是比Python快。同时,本地Python比执行Numpy类型慢得多。


Numpy速度真的很快。它是一个拥有超优化函数(大多已预编译)的库,专注于为Python用户提供(对数据科学家和机器学习工程师特别有用)接近C语言的速度。简单的Numpy函数,如求和或标准差函数可以较好地匹配或打败Julia等效组件(特别是较大的数组)。


然而,想要充分利用Numpy函数,必须要考虑代码的矢量化。在程序中,一直以矢量化代码的形式编写复杂逻辑很不容易。


因此,在将复杂逻辑应用于某种处理数组的情况下时,应该对Julia进行速度对比。


本文中将展示几组相似例子以对这一点进行解释。


然而,想要充分利用Numpy函数,必须要考虑将代码矢量化。


对于for循环,Julia远胜于Python


计算一百万个随机整数的和以验证这一点。


Julia代码如下。此函数所需时长稍多于1毫秒。


Python代码如下。我们保留代码的函数特性(Julia是函数语言)以保持对比的公平性,且便于验证。For循环所需时长竟超过200毫秒!



但如何将Julia数组与Numpy数组进行比较呢?


在以上代码中,创建一个数组变量。对于数据科学而言,这就是Julia中用途最大的数据结构,因为它能直接进行统计计算或线性代数运算。


无需单独的库或任何东西。Julia数组比Python列表快好几个数量级。


但是,Numpy数组速度很快,一起对同样的求和运算进行基准测试。


下方的Julia代码使用数组上的sum()函数。它花费的时长约为451微秒(比for循环方法快,但只有一半的时间)。


下图是由Numpy执行。


天哪!Numpy仅需353微秒,它的速度打败了Julia,而且比本地的Python for循环代码快了近628倍。


所以,这一有利于Numpy的结论已经确定了吗?


还没那么快。如果只想求出数组中奇数之和呢?


无需单独的库或任何东西。Julia数组比Python列表快好几个数量级。


请看逻辑


对Julia而言,代码更改相当简单。本文将只使用for循环,检查数组中的元素是否能被2整除,如果不能(奇数),则将其添加至运行总和之中。尽可能地学究一点!


所以,这需要运行近4毫秒。的确是比盲和(使用for循环)慢,但也没慢太多(for循环的纯和约为1.1毫秒)。


现在,当然不能用这种速度与Python for循环竞争!结果显而易见,不是吗?所以,必须使用Numpy将代码矢量化。


但是,该怎么检查奇数,然后在Numpy数组中对奇数求和呢?多亏有np.where()这一方法。


下图是Python代码。没那么简单(除非你知道如何正确使用np.where),是吗?


但看一看速度。即使采用单行矢量化代码的Numpy方法,平均用时也需16.7毫秒。


Julia代码更为简单,运行速度更快!


另一项略为复杂的运算


假设有三个数组(称之为W、X和B),随机浮点数在-2到2之间,想要计算一个特殊量:其中两个数组的乘积与第三个数组相加,即A.X B,但只有当元素的线性组合大于零时,才会将这个值添加到最终的和之中。


这个逻辑看着熟悉吗?它是任何紧密连接的神经网络(甚至是单个感知器)的变体。其中权值、特征和偏差向量的线性组合必须超过某个阈值才能传播到下一层。


下图是Julia编码。再一次地它的表现堪称简洁、完美。仅花费了约1.8毫秒。它使用了一个名为muladd()的特殊函数,该函数将两数字相乘并将数值与第三个数字相加。


使用Python以相似代码(进行for循环)进行尝试,结果同预期一样,惨不忍睹!平均花费时长超过1秒钟。


再来一次,创新一下,使用Numpy矢量化代码,结果比for循环案例要好得多,时长约为14.9毫秒,但还是不如Julia。


那么,结果如何呢?


至此,趋势愈加明显。对于数值运算,进行某些数学运算之前需要检查复杂逻辑,Julia轻松地击败了Python(甚至Numpy),因为编写逻辑时可以使用Julia中最简单的代码,然后把它忘掉。


得益于即时(JIT)编译器和内部类型相关优化,它仍将以惊人的速度运行(Julia有一个极其复杂的类型系统,可以使程序根据每个变量的正确数据类型快速运行,并优化代码和相应内存)。


使用本地Python数据结构和for循环编写相同代码的速度非常慢。随着复杂程度提高,即使使用Numpy矢量化代码,速度也远低于Julia。


Numpy非常适合已经附带如sum()或mean()或std()等简单方法的数组,但使用这些方法的同时还需使用逻辑,这并不简单,还会严重拖慢运算速度。


在Julia中,无需费心思考代码的矢量化。即使是看起来很愚蠢的代码,使用简单的for循环和元素对元素的逻辑检查,运行速度也会非常快!


对于数值运算,进行某些数学运算之前需要检查复杂逻辑,Julia轻松地击败了Python(甚至Numpy),因为编写逻辑时可以使用Julia中最简单的代码,然后便无需在意。

总结

本文展示了Julia和Python本地代码与已优化的Numpy函数之间数值运算的比较基准测试。


尽管就简单函数而言,Numpy与Julia的速度不相上下,但在计算问题中引入复杂逻辑时,Julia更胜一筹。Julia代码的编写十分简单,无需考虑函数的向量化。


随着数据科学与机器学习支持系统的不断发展,Julia是未来最令人期待的新语言之一。它是一个工具,是初级数据科学家都应掌握的技能。

图源:Unsplash


你心动了吗?快来试试备受褒奖的Julia吧~


使用 Julia 从零开始构建一项完整的数据科学应用。

你准备好了吗?


留言点赞关注

我们一起分享AI学习与发展的干货

如转载,请后台留言,遵守转载规范

,
    推荐阅读
  • 罗贯中是写的什么(罗贯中无心一笔)

    如实地记录了三国鼎立的局势,而并非魏蜀吴中某国的一家之言。在政治方面与萧何、管仲是同一流人物。很多人把这段内容当作陈寿在故意贬低诸葛亮,由于诸葛亮的影响力过大,导致很多人对陈寿不满。并不存在冲突性。他们认为陈寿记恨在心,故意抹黑诸葛亮。岂不会背上大逆不道之罪。

  • 牛油果氧化后还能吃吗(牛油果氧化后建议继续食用的吗)

    接下来我们就一起去了解一下吧!如果牛油果与空气发生反应,已经氧化了的话,一般不建议食用,因为其中的营养成分已经大量流失,营养价值降低,并且口感会变差,食用价值不高,所以建议吃牛油果即开即食。

  • 洗完头头发炸了怎么办(洗完头头发炸了解决方法)

    洗完头头发炸了怎么办洗头发前先梳理好头发。会炸毛的女生们在洗头发之前一定一定要将头发梳理好,把头发梳理顺畅了,再打湿头发洗头。这样对头发的伤害是非常大的。洗头发时注意控制水温。洗头发用的水温度不宜过高。洗完头发后涂抹护发精油。许多女生发质比较干,还可以在洗完头发涂抹些护发精油,这种方法可以很好地解决头发蓬松的问题。

  • 哪种糖是低糖(无糖代糖低糖)

    随着养生趋势的流行,无糖食品渐渐走红,糖、饼干、饮料等一系列产品,不仅能满足绝大多数人群的需求,还能够减少机体摄入更多的糖,过瘾还不用担心。不过,和低糖相比,无糖食品用了更低热量的甜味剂代替,整体热量更低,相对来说较为健康。对于慢性病人群来说,代糖的优势还不会升高血糖。不过,大家还要注意一个问题,代糖食物毕竟有甜味,能够刺激人的食欲,不吃糖是最好的选择。

  • 萝卜烧肉怎么烧(萝卜烧肉的做法)

    接下来我们就一起去了解一下吧!萝卜烧肉怎么烧主料:萝卜500克、猪肉(瘦)200克。辅料:盐2克、红烧酱油15克、糖2克、耗油6克、油2勺、生抽4克、蒜苗少许。瘦肉切粒,调入耗油、生抽、油、盐、糖码入味。热油锅煽香姜蒜。炒至全部变色,肉质收紧。倒入抹过食材的热水。盖盖烧煮约15分钟,中间开盖翻一翻防粘锅。翻炒几下便可出锅。

  • 下意识是什么意思(下意识是什么含义)

    指知觉意识范围之外的心理活动和心理过程。在通常情况下,下意识往往被用作为无意识的同义词。但是在弗洛伊德的理论中,下意识并不等于无意识,原因在于这样会混淆无意识和潜意识的区别。下意识本身也是心理过程,但在一定的时刻,这些过程不受到注意,因为它们是无意识的思想活动中心。下意识是意识活动的副产品,其中没有任何神秘的、不可知的因素。

  • 平板电脑和笔记本电脑的区别是什么(平板电脑和笔记本电脑的区别是啥)

    平板不能玩大型游戏,办公不方便,功能少不易操作;笔记本电脑办公和玩游戏和台式电脑的功能一样的。平板电脑的操作主要是通过手指来输入,还可以通过麦克风和重力感来辅助输入;而笔记本电脑用键盘、鼠标、中间触摸板来输入。平板放在哪里也可以操作,而比较本电脑必须放在桌子上或膝盖上。平板电脑是移动智能设备,也就是说是大号的智能手机;比记本电脑其实就是电脑,只不过是能移动的电脑而已。

  • 已婚男人玩暧昧怎么对待(已婚男女搞暧昧)

    #已婚男女搞暧昧到底出于什么心态#现代社会,对于情侣关系内,跟其他人搞暧昧或者劈腿太常见了。年轻,无知状,也最容易好奇,以及沉浸其中。甚至东窗事发了,对方提起都死不承认,只要对方不把证据摆出来,那些人都是死不承认死不认账的。这就是部分人的嘴脸。都已婚状态了,还有这些,无外乎以下几种原因,如果有所不全,大家也可以提出补充。

  • 公式编辑器打出三角函数符号(如何用WORD书写三角函数公式)

    奇、偶指的是π/2的倍数的奇偶,变是指正弦变余弦,正切变余切。一象限全部二象限正弦三象限正切余切四象限余弦都是其余全是-记忆:一应俱全二人挣钱自然四季有余,三生不易更应且行且珍惜。

  • 广汽丰田混动十周年活动(将混动技术萃取到极致)

    虽然此次节油挑战赛为期两天进行,时间并不算长,但就在这短暂的两天中让我对丰田双擎混动技术有了新的认知,不得不说未来内燃机的主流发展方向一定是混合动力模式,而在这个技术发展领域却存在很多种产品模式,而丰田无疑走在了这个领域时代的最前沿,也最大程度将内燃机与混动效率压萃取到了极致,也更期待能尽早看到下一代双擎产品的推出,相信那时的节能效率一定会提升至更高的水平。