julia为什么快

在本文中,我将说明为什么认真对待创建机器学习算法和高性能数据科学编程的人们应该使用Julia而不是Python。  

作为记录,我喜欢Python-我喜欢它给我的脚本和应用程序编程之间的自由。 由于我已经编写了高性能数据处理和分析代码,这些代码一直存在于HPC集群上超过25年,因此与许多使用Python解决问题的用户/程序员相比,我的看法有所不同。

尤其对于大数据,无论是在生物技术,金融科技,地球科学还是其他领域,数据处理和分析代码都可以运行数天或数周。 以2倍,3倍或5倍的速度减慢来换取程序员的生产力或抽象度是不可接受的折衷方案。

也许Python,Matlab,R等语言可以使研究人员制定解决方案的新方法,对研究很有用,但除非它们相差不大两倍,否则它们就无法在大数据/ HPC世界中竞争。与优化的Fortran相比,在运行时

我自己,对于一般的HPC应用程序,我将HPF(高性能fortan)和C / C ++与GPGPU混合使用。 对于需要交付给客户的商业应用程序,我使用Java(Netbeans)/ C和GPGPU的混合物。 目前,对于我的前端应用程序面向用户的开发,我使用Java Netbeans,但现在越来越多地使用Python和Node.js,这是因为它们既简单又可移植。

话虽如此,直到我遇到Julia,我对结果不满意。

Julia(Julia)的发布帖子承诺:“该语言将C的速度与Python的可用性,Ruby的动态性,Matlab的数学能力以及R的统计能力结合在一起。”

Julia的核心创建者和促进者之一,爱德曼说,从技术角度来看,该语言的核心特征是“其多调度范式,它可以表达面向对象和功能的编程模式,支持“通用编程”,并且它的“攻击性类型系统”。这种类型系统可以满足许多不同的用例;它是动态类型化的,但支持可选的类型声明。语言“感觉像脚本语言”,但可以编译为“高效的本机代码”通过LLVM支持多个平台。”

“ Julia已发布的基准测试表明它的性能接近或稍差于C,而Fortran照例在大多数任务上的性能均优于C。”

Julia的语法非常类似于Matlab,但是具有Python的灵活性,并提供类似Lisp的宏,从而使程序员更容易入门。 对我而言,与Matlab / Python的区别真正体现在使用Julia惊人的快速基于LLVM的即时(JIT)编译器时,它易于实现分布式并行执行,并关心数值准确性。

Julia还具有一个数学函数库,其中大多数是用Julia编写的,以及C和Fortran库。 从任何角度看,这都不能算是一件坏事。 那里的大多数主要的机器学习工具集(例如TensorFlow)都是用C语言编写的。 从性能的角度来看,这是一件好事,但有时也会出现缺点,如下所示。

对于程序员而言,Julia功能强大,因为它围绕类型构建。 我们可以轻松地构建通用代码,该通用代码在各种类型上都具有良好的性能。 结果是接近高性能Fortran代码的东西,但是它也具有许多功能。

Edelman说:“ Matlab和其他环境采用以前编写的Fortran或C或专有代码,然后将它们与所谓的泡泡糖和回形针粘合在一起。这具有易于访问用更困难的语言编写的程序的优势,但是成本。当您准备自己编写代码时,您将不会从Fortran或C速度中受益。”

Julia(Julia)对我而言最大的优势在于旧版图书馆问题。 甚至可以从REPL中直接调用Fortran和C例程(编译为共享库),并且没有胶水代码也没有仪式。

这是使用Fortran NAG库而没有大惊小怪的示例:

function nag_nearest_correlation(g:: Matrix { Float64 }, order = Nag_ColMajor, errtol= 0.0 , maxits=NagInt( 0 ), maxit=NagInt( 0 ))n, pdg = size(g)pdx = pdgx = Array ( Float64 ,n,pdg)nag_nearest_correlation!(order, g, pdg, n, errtol, maxits, maxit, x, pdx)return x
endG = [ 2.0 - 1.0  0.0  0.0 ;- 1.0  2.0 - 1.0  0.0 ;0.0 - 1.0  2.0 - 1.0 ;0.0  0.0 - 1.0  2.0 ]X = nag_nearest_correlation(G)

这意味着我可以快速建立在多年的开发基础上,而不必花费数周或数月的复杂前端包装程序构建,这本身必须经过测试和调试,而我导入的代码已经过测试并可以使用。

爱德曼(Edelman)用来推广这个想法的案例:

不幸的是,当咳嗽的口音不同时,机器学习模型预测个人是否患有结核病的能力受到了阻碍。

Edelman说:“当然,您要做的就是了解某人是否生病,而您不希望它了解口音的差异。”

使用像Python这样的高级语言和标准的机器学习库来解决由不同的重音引起的混淆是很困难的,这些语言通常是用性能更好的低级语言(如C ++)编写的。

“有人告诉我,所有常规库都做不到。这不是很困难,但是您必须以标准库不允许您做的方式来调整神经网络。”他说。

“当前的库有点像砖砌的建筑物,如果要四处移动它们,必须要有一个相当繁重的程序员才能对其进行更改。

“但是这位同伙对朱莉亚说,因为它的水平很高,所以他能够轻松解决这个问题。

“因此,我们真正想做的是使越来越多的人能够做这种事情,从而能够超越现有图书馆的范围,并借助机器学习进行创新。”

Julia(Julia)可以随意导入这些“砖块建筑物”的功能赋予了它强大的功能,但是它能够有效地取代它们,因此对于像我这样的人而不是说Python的人来说,这是一个明确的选择。

这是TensorFlow的一部分神经元激活功能的片段示例,整个文件softsign_op.cc及其关联的标头在某种意义上是普通Python开发人员无法访问的。 在Julia中,我们可以像这样编写高性能的代码,但更易于理解和修改。

template < typename Device, typename T>
class SoftsignGradOp: public BinaryElementWiseOp<T, SoftsignGradOp<Device, T>> {public :explicit SoftsignGradOp (OpKernelConstruction* context): BinaryElementWiseOp<T, SoftsignGradOp<Device, T>> (context)  {}void OperateNoTemplate (OpKernelContext* context, const Tensor& g,const Tensor& a, Tensor* output) ;// INPUTS:
//   g (gradients): backpropagated gradients
//   a (inputs): inputs that were passed to SoftsignOp()
// OUTPUT:
//   gradients to backprop
template < int NDIMS>
void Operate (OpKernelContext* context, const Tensor& g, const Tensor& a,Tensor* output)  {OperateNoTemplate(context, g, a, output);}
};template < typename Device, typename T>
void SoftsignGradOp<Device, T>::OperateNoTemplate(OpKernelContext* context,const Tensor& g,const Tensor& a,Tensor* output) {OP_REQUIRES(context, a.IsSameSize(g),errors::InvalidArgument( "g and a must be the same size" ));functor::SoftsignGrad<Device, T> functor;functor(context->eigen_device<Device>(), g.flat<T>(), a.flat<T>(),output->flat<T>());
}

回想起我几乎和Julia一样爱Python:

软件包管理器可加速Julia的开发,从而简化附加组件的开发。 IJulia是与IPython社区一起开发的,旨在与基于Jupyter基于浏览器的图形笔记本界面链接在一起,我们的社区利用该界面演示易于重复的研究成果。

Edelman对Julia的内置功能充满了诗意,该功能使开发人员可以更轻松地在同一处理器中和分布式系统中的多个芯片之间的多个CPU内核之间分配工作负载。 当前的发展重点是Julia对其他类型的处理器上的并行处理的本机支持,例如图形处理单元(GPU)和Google的Tensor处理单元(TPU),它们越来越多地用于加速机器学习。

Julia是一种功能强大的语言,但是与Python相比,它还相对年轻,但是也许您想使用Julia外部的自己的库。 在这种情况下,Julia提供了从R和Python调用库的方法(甚至通过JNI扩展了Java,甚至比Jython和它的朋友还成熟)

julia>using JavaCalljulia> JavaCall.init([ "-Xmx128M" ])julia> jlm = @jimport java.lang.Math
JavaObject{:java.lang.Math} (constructor with 2 methods))julia> jcall(jlm, "sin" , jdouble, (jdouble,), pi / 2 )
1.0

这是使用Pandas机器学习工具包的示例(直接从Julia中的Python获取)

julia> Pkg.add("PyCall.jl" )
using PyCall@pyimport pandas as pddf = pd.read_csv( "train.csv" )

或更直接地使用https://github.com/JuliaPy/Pandas.jl

在下一个示例中,我们直接从Julia调用Python的matplotlib ,几乎没有开销(没有传递副本就传递了数组)。

using PkgPkg.add( "PyPlot" )using PyPlotx = range( 0 ,stop= 2 * pi ,length= 1000 ); y = sin.( 3 *x + 4 *cos.( 2 *x))plot(x, y, color= "red" , linewidth= 2.0 , linestyle= "--" )

这就是我真正喜欢Julia的东西。 在过去的30年中,我已经积累了很多专业代码和库。 在大多数情况下,没有什么要移植或重写的内容,也没有繁琐的任务。

我想明确一点,我并不是说“ Python是给孩子们的”之类的意思,而是要进行认真的研究,再结合在大数据世界中快速开发和部署,Julia具有明显的优势,我认为远远超过了Python的缺点。

随着语言的支持(它是目前发展最快的语言之一),许多缺少的东西将被添加。 我认为Python无法成长为Julia,因此

我爱上了Julia。

先前发布在https://www.linkedin.com/pulse/why-im-love-julia-david-markus/

翻译自: https://hackernoon.com/why-im-in-love-with-julia-jo763y3a

julia为什么快

julia为什么快_为什么我爱上Julia相关推荐

  1. Julia与R/Python/MATLAB比较及Julia中的Text Analysis模块

    http://site.douban.com/146782/widget/notes/15468638/note/356127615/           上午等着R跑数,R是出了名的慢,特别是处理文 ...

  2. julia python_如何让 Python 像 Julia 一样快地运行

    展开全部 Julia 与 Python 的比较 我是否应丢弃 Python 和其他语言,使用 Julia 执行技术计算?在看到 http://julialang.org/ 上的基准测试62616964 ...

  3. julia fit 函数_带有Julia中示例的flipsign()函数

    julia fit 函数 Julia| flipsign()函数 (Julia | flipsign() function) flipsign() function is a library func ...

  4. julia 数组类型转换_在Julia中确定类型的超类型

    julia 数组类型转换 To determine the supertype of a type – we use the supertype() function, it accepts a da ...

  5. python和shell哪个快_有没有可能让这个shell脚本更快?

    我的任务是创建一个以一个巨大的文本文件作为输入的脚本.然后它需要找到所有单词和出现的次数,并创建一个新文件,每行显示一个唯一的单词及其出现的次数.在 以包含以下内容的文件为例:Lorem ipsum ...

  6. vc6.0 debug 比 release 快??_全网稀缺的快应用开源项目熊宝儿歌故事QuickApp

    开发本产品时快应用推出时间不久,网络上关于快应用的资料少之又少,本人也因公司需求进行开发,一路上摸索过来,并集成统计,完全遵循正式项目,今想把自己的一些经验分享出来,让大家少走弯路,如有错误和意见欢迎 ...

  7. repeat_PTA_L2-4 秀恩爱分得快_细节超多

    PTA_2020模拟赛_L2-4 秀恩爱分得快 (25 分)_细节模拟_TLE处理 // #include<bits/stdc++.h> using namespace std;const ...

  8. 2020移动apn接入点哪个快_为什么都是4G网你的就没别人快?跟我这样设置,网速直线提升...

    想必很多朋友都遇到过,在同一个地方手而且都是4G网,手机网速却没有别人的快?这个问题最直观的表现就是,两个人坐在一起开黑玩游戏,有个人网速流畅,但是另一个却卡的掉线.那么这个究竟是什么导致的呢?下面我 ...

  9. 怎么找思科答案最快_成功闯入思科的面试经历

    3月,在招聘应届大学毕业生方面向来"后发制人"的思科中国公司,先后在全国21所高校展开了"思科校园行"活动.上海站的校园招聘活动也陆续在上海交通大学.复旦大学和 ...

最新文章

  1. 视觉导航的神经拓扑SLAM
  2. 前端开发大众手册(转)
  3. jQuery中wrap、wrapAll和wrapInner用法以及区别
  4. Linux 线程实现机制分析--转
  5. java api 英文_JAVA中英文API(在线版)
  6. @propertysource 读不到properties_在加拿大读了6年还是大学一年级,会被赶出校吗?...
  7. python序列_什么是Python的序列协议?
  8. 确保企业的大数据投资达到预期的5种方法
  9. 几个高逼格 Linux 命令!
  10. 拷贝 var lib mysql 备份_mysql复制与备份
  11. C#LeetCode刷题之#349-两个数组的交集(Intersection of Two Arrays)
  12. VPC 2007 Console界面消失以及解决方法
  13. hdu 4027 Can you answer these queries?
  14. 傅里叶变换性质证明卷积_图傅里叶变换
  15. 【优化求解】基于matlab粒子群算法求解干扰受限无人机辅助网络优化问题【含Matlab源码 230期】
  16. 手机充当电脑 麦克风 扬声器 摄像头
  17. python3视频教程哪个好_2020年5个经典python编程入门视频教程推荐学习
  18. HashSet源码解读
  19. Python 三维姿态估计+Unity3d 实现 3D 虚拟现实交互游戏
  20. 根据报告数据,2021 年 Q1,全球小说 App 推广榜 Top20 里面,有 11 个 App 来自中国厂商。最新版本已经上线

热门文章

  1. 本地Httprunner3使用locust的方式
  2. [OO] Unit3 Summary JML系列
  3. 移动网络技术2G -- 3G -- 4G
  4. 神舟Z7笔记本如何有效降低CPU温度?
  5. Web前端登录拼图验证功能,看你是人还是机器
  6. Class not found :“ test” 的解决方法
  7. 几何观止(经典几何对象)
  8. CDIO完整实现必备的几个过程(不成熟的想法,供讨论)
  9. Bray-curtis,unifrac,weighted unifrac,jaccard计算方法比较
  10. MATLAB图像增强:实现文档扫描效果