展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > Julia 和 Python,哪一个更快?

Julia 和 Python,哪一个更快?

Julia是一门高度抽象的动态编程语言。虽然它是一门能够开发所有程序的通用语言,但它有几个特点,非常适用于科学计算和数值计算。Python在1990年初作为一种简单的面向对象的程序语言出现,如今已经有了显著的发展。本文将从它们在神经网络和机器学习的性能表现上进行讨论。Julia的架构以动态语言中的参数多态性parametricpolymorphism和多重派发multipledispatch的编程范式为主要特色。它允许使用或不使用消息传递接口messagepassinginterface

本文目录

    Julia 和 Python,哪一个更快?

    Julia 是一门高度抽象的动态编程语言。虽然它是一门能够开发所有程序的通用语言,但它有几个特点,非常适用于科学计算和数值计算。Python 在 1990 年初作为一种简单的面向对象的程序语言出现,如今已经有了显著的发展。本文将从它们在神经网络和机器学习的性能表现上进行讨论。

    Julia 的架构以动态语言中的参数多态性parametric polymorphism和多重派发multiple dispatch的编程范式为主要特色。它允许使用或不使用消息传递接口message passing interface(MPI)或内置的 “OpenMP 式” 线程进行并发、并行和分布式计算,以及直接调用 C 和 FORTRAN 库而无需额外的代码。Julia 使用 即时just-in-time(JIT)编译器,Julia 社区将其称为 “即时预编译just-ahead-of-time(JAOT)”,因为它在运行之前默认将所有代码编译为机器码。

    与 Python 不同,Julia 是专为统计学和机器学习而设计的。Julia 可以快速的完成线性代数的运算,但 Python 很慢。这是因为 Python 从来都不是为了适应机器学习用到的矩阵和方程而设计的。Python 本身并不差,特别是 Numpy,但在没有使用包的情况下,Julia 更像是为数学量身定制的。相比 Python,Julia 的运算符更像 R,这是一个显著的优势。大部分的线性代数运算可以用更少的时间和精力去完成。

    众所周知,近年来 Python 在机器学习和数据科学领域占据主导地位。因为在 Python 中我们可以使用各种各样的第三方库来帮助我们编写机器学习的代码。虽然 Python 有这么多优势,但仍有一个主要的缺点——它是一门解释性语言,速度非常慢。现在是数据时代,数据越多我们处理它的时间就越长,这也是 Julia 出现的理由。

    到目前为止,有关 Julia 的研究工作都集中在高性能或者 Julia 的科学计算能力等主题上。但在这里,我们将讨论 Julia 不仅能够有效地处理复杂的科学计算,还能够处理基于商业的问题,以及像 Python 一样处理机器学习和神经网络。

    实验目标与实验设计

    Julia 像 Python 一样简洁,但却像 C 一样是一门编译语言。首先我们来测试 Julia 要比 Python 快多少。为此,我们先在一些简单的程序上测试它们,然后来到我们实验的重点,测试它们的机器学习和深度学习能力。

    Julia 和 Python 都提供了许多库和开源的基准测试工具。为了在 Julia 中进行基准测试和计算时间,我们使用了 ​​CPUTime​​ 和 ​​time​​ 库;对于 Python,我们同样使用了 ​​time​​ 模块。

    矩阵乘法

    一开始我们尝试了简单的算术运算,但由于这些运算不会产生太大的时间差异,我们决定比较矩阵乘法的时间差异。我们创建了两个 ​​(10 * 10)​​ 的随机浮点数矩阵,并对它们施以点积。众所周知,Python 有一个 ​​Numpy​​ 库,常被用于计算矩阵和向量。而 Julia 也有一个 ​​LinearAlgebra​​ 库,常用于计算矩阵和向量。因此我们分别比较了各自使用和不使用库的矩阵乘法的耗时。本文用到的所有源码已经放在了 ​​GitHub 存储库​​。下面给出了用 Julia 编写的 10×10 矩阵乘法程序:

    @time LinearAlgebra.mul!(c,x,y)
    
    
    function MM()
    
    x = rand(Float64,(10,10))
    
    y = rand(Float64,(10,10))
    
    c = zeros(10,10)
    
    
    for i in range(1,10)
    
    for j in range(1,10)
    
    for k in range(1,10)
    
    c[i,j] += x[i,k]*y[k,j]
    
    end
    
    end
    
    end
    
    end
    
    @time MM
    
    
    0.000001 seconds
    
    MM (generic function with 1 method)

    Julia 使用库耗时 0.000017 秒,使用循环耗时 0.000001 秒。

    使用 Python 编写相同的矩阵乘法程序如下。 从结果可以发现,与不使用库相比,使用库的程序花费的时间更少:

    import numpy as np
    
    import time as t
    
    x = np.random.rand(10,10)
    
    y = np.random.rand(10,10)
    
    start = t.time()
    
    z = np.dot(x, y)
    
    print(“Time = “,t.time()-start)
    
    Time = 0.001316070556640625
    
    
    import random
    
    import time as t
    
    l = 0
    
    h= 10
    
    cols = 10
    
    rows= 10
    
    
    choices = list (map(float, range(l,h)))
    
    x = [random.choices (choices , k=cols) for _ in range(rows)]
    
    y = [random.choices (choices , k=cols) for _ in range(rows)]
    
    
    result = [([0]*cols) for i in range (rows)]
    
    
    start = t.time()
    
    
    for i in range(len(x)):
    
    for j in range(len(y[0])):
    
    for k in range(len(result)):
    
    result[i][j] += x[i][k] * y[k][j]
    
    
    print(result)
    
    print(“Time = “, t.time()-start)
    
    
    Time = 0.0015912055969238281

    Python 使用库耗时 0.0013 秒,使用循环耗时 0.0015 秒。

    线性搜索

    我们进行的下一个实验是对十万个随机生成的数字进行线性搜索。这里使用了两种方法,一种是使用 ​​for​​ 循环,另一种是使用运算符。我们使用 1 到 1000 的整数执行了 1000 次搜索,正如你在下面的输出中看到的那样,我们还打印了我们在数据集中找到了多少个整数。下面给出了使用循环和使用 ​​IN​​ 运算符的时间。这里我们使用了 CPU 3 次运行时间的中位数。

    使用 Julia 编写的程序和运行结果如下:

    (LCTT 译注:此处原文缺失 Julia 代码)

    使用 Python 编写的程序和运行结果如下:

    import numpy as np
    
    import time as t
    
    x = np.random.rand(10,10)
    
    y = np.random.rand(10,10)
    
    start = t.time()
    
    z = np.dot(x, y)
    
    print(“Time = “,t.time()-start)
    
    Time = 0.001316070556640625
    
    
    import random
    
    import time as t
    
    l = 0
    
    h= 10
    
    cols = 10
    
    rows= 10
    
    
    choices = list (map(float, range(l,h)))
    
    x = [random.choices (choices , k=cols) for _ in range(rows)]
    
    y = [random.choices (choices , k=cols) for _ in range(rows)]
    
    
    result = [([0]*cols) for i in range (rows)]
    
    
    start = t.time()
    
    
    for i in range(len(x)):
    
    for j in range(len(y[0])):
    
    for k in range(len(result)):
    
    result[i][j] += x[i][k] * y[k][j]
    
    
    print(result)
    
    print(“Time = “, t.time()-start)
    
    
    Time = 0.0015912055969238281
    FOR_SEARCH:
    
    Elapsed CPU time: 16.420260511 seconds
    
    matches: 550
    
    Elapsed CPU time: 16.140975079 seconds
    
    matches: 550
    
    Elapsed CPU time: 16.49639576 seconds
    
    matches: 550
    
    
    IN:
    
    Elapsed CPU time: 6.446583343 seconds
    
    matches: 550
    
    Elapsed CPU time: 6.216615487 seconds
    
    matches: 550
    
    Elapsed CPU time: 6.296716556 seconds
    
    matches: 550

    从以上结果来看,在 Julia 中使用循环和运算符并不会产生显著的时间差异。但是在 Python 中循环几乎比运算符 IN 多花了三倍的时间。有趣的是,在这两种情况下,Julia 都比 Python 快得多。

    线性回归

    下一个实验是测试机器学习算法。我们选择了以一种最常见和最简单的机器学习算法,使用简单数据集的线性回归。我们使用了一个包含 237 条数据的数据集 “Head Brain”,数据集的两列分别为 “HeadSize” 和 “BrainWeight”。接下来,我们使用 “head size” 数据去计算 “brain weight”。在 Python 和 Julia 中我们都没有使用第三方库,而是从零实现了线性回归算法。

    Julia:

    GC.gc()
    
    @CPUtime begin
    
    linear_reg()
    
    end
    
    elapsed CPU time: 0.000718 seconds

    Python:

    gc.collect()
    
    start = process_time()
    
    linear_reg()
    
    end = process_time()
    
    
    print(end-start)
    
    elapsed time: 0.007180344000000005

    上面给出了 Julia 和 Python 所花费的时间。

    逻辑回归

    接下来,我们使用两种语言的库对最常见的机器学习算法(即逻辑回归)进行了实验。对于 Python 我们使用最常见的库 ​​sklearn​​;对于 Julia,我们使用 ​​GLM​​ 库。我们在这里用到的数据集是有关银行客户的信息,其中包含 10,000 个数据条目。目标变量是一个二元变量,区分消费者是否继续使用银行账户。

    下面给出了 Julia 进行逻辑回归所花费的时间:

    @time log_rec()
    
    0.027746 seconds (3.32 k allocations: 10.947 MiB)

    下面给出了 Python 进行逻辑回归所花费的时间:

    gc.collect()
    
    start = process_time()
    
    LogReg()
    
    end = process_time()
    
    print(end-start)
    
    
    Accuracy : 0.8068
    
    0.34901400000000005

    神经网络

    在各种程序和数据集上测试这两种语言后,我们在神经网络上使用 MNIST 数据集继续测试它们。该数据集包含从零到九的手绘数字的灰度图像。每张图像为 28×28 像素。每个像素值表示该像素的亮度或暗度,该值是包含 0 到 255 之间的整数。该数据还包含一个标签列,该列表示在相关图像中绘制的数字。

    Julia 和 Python,哪一个更快?

    Figure 1: Example of MNIST data set

    图 1 是 MNIST 数据集的示例。

    对两种语言我们都建立了一个简单的神经网络来测试它们耗费的时间。神经网络的结构如下:

    Input ---> Hidden layer ---> Output

    该神经网络包含了一个输入层、隐层还有输出层。为了避免神经网络的复杂度过高,我们对数据集没有进行任何的预处理工作。在 Julia 和 Python 中我们都进行了40次训练并比较它们的时间差异。

    Julia 和 Python,哪一个更快?

    Figure 2: Julia takes 5.76 seconds in a neural network

    在 Julia 中,​​Flux​​ 库通常被用于建立神经网络;在 Python 中我们常使用 ​​Keras​​ 库。图 2 展示了 Julia 在神经网络上的耗时。图 3 展示了 Python 的神经网络经过了若干次训练的耗时。

    Julia 和 Python,哪一个更快?

    Figure 3: Python takes 110.3 seconds in a neural network

    这个结果展示了 Julia 和 Python 在处理神经网络时存在巨大的时间差异。

    表 1 总结了此次实验的测试结果并计算了 Julia 和 Python 时间差异的百分比。

    实验

    Julia(秒)

    Python(秒)

    时间差(%)

    矩阵乘法(不使用库)

    0.000001

    0.0015

    99.9

    矩阵乘法(使用库)

    0.000017

    0.0013

    98.69

    线性搜索(使用循环)

    0.42

    16.4

    97.43

    线性搜索(使用 IN 操作符)

    0.43

    6.2

    93.06

    线性回归

    0.000718

    0.00718

    90

    逻辑回归

    0.025

    0.34901

    92.83

    神经网络

    5.76

    110.3

    94.77

    我们进行的所有实验都表明,随着程序复杂性以及数据集大小的增加,Julia 和 Python 之间的执行时间差异也会增加。由这个结果我们可以推断,Julia 是一门更适合机器学习和神经网络的编程语言。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 机器学习 Python
    相关文章 更多
    精品专题 更多
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    IOS软件

    正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

    AI

    正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw macOS版
    AionClaw macOS版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy macOS版
    Loomy macOS版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    AirBuddy 3 macOS版
    AirBuddy 3 macOS版

    AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

    AirServer macOS版
    AirServer macOS版

    AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

    AnyDesk macOS版
    AnyDesk macOS版

    AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。

    讯飞绘文 网页版
    讯飞绘文 网页版

    讯飞绘文网页版是科大讯飞推出的AI图文创作与内容运营工具,覆盖热点选题、文章生成、稿件校对、智能配图、排版发布和数据复盘等环节,适合自媒体创作者及内容团队在线使用。

    Maya(Autodesk Maya) Windows版
    Maya(Autodesk Maya) Windows版

    Autodesk Maya 是面向影视、电视、动画和游戏行业的专业三维制作软件,集多边形与 NURBS 建模、角色绑定、关键帧和动作捕捉动画、Bifrost 特效模拟、材质开发及 Arnold 渲染于一体,

    Aperty Windows版
    Aperty Windows版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw Windows版
    AionClaw Windows版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy Windows版
    Loomy Windows版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。