日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Julia和Python,哪一個更快?

Julia 是一門高度抽象的動態(tài)編程語言。雖然它是一門能夠開發(fā)所有程序的通用語言,但它有幾個特點,非常適用于科學(xué)計算和數(shù)值計算。Python 在 1990 年初作為一種簡單的面向?qū)ο蟮某绦蛘Z言出現(xiàn),如今已經(jīng)有了顯著的發(fā)展。本文將從它們在神經(jīng)網(wǎng)絡(luò)和機器學(xué)習(xí)的性能表現(xiàn)上進(jìn)行討論。

成都創(chuàng)新互聯(lián)公司擁有一支富有激情的企業(yè)網(wǎng)站制作團(tuán)隊,在互聯(lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)深耕十載,專業(yè)且經(jīng)驗豐富。十載網(wǎng)站優(yōu)化營銷經(jīng)驗,我們已為上千家中小企業(yè)提供了成都網(wǎng)站設(shè)計、成都做網(wǎng)站解決方案,定制制作,設(shè)計滿意,售后服務(wù)無憂。所有客戶皆提供一年免費網(wǎng)站維護(hù)!

Julia 的架構(gòu)以動態(tài)語言中的參數(shù)多態(tài)性parametric polymorphism和多重派發(fā)multiple dispatch的編程范式為主要特色。它允許使用或不使用消息傳遞接口message passing interface(MPI)或內(nèi)置的 “OpenMP 式” 線程進(jìn)行并發(fā)、并行和分布式計算,以及直接調(diào)用 C 和 FORTRAN 庫而無需額外的代碼。Julia 使用 即時just-in-time(JIT)編譯器,Julia 社區(qū)將其稱為 “即時預(yù)編譯just-ahead-of-time(JAOT)”,因為它在運行之前默認(rèn)將所有代碼編譯為機器碼。

與 Python 不同,Julia 是專為統(tǒng)計學(xué)和機器學(xué)習(xí)而設(shè)計的。Julia 可以快速的完成線性代數(shù)的運算,但 Python 很慢。這是因為 Python 從來都不是為了適應(yīng)機器學(xué)習(xí)用到的矩陣和方程而設(shè)計的。Python 本身并不差,特別是 Numpy,但在沒有使用包的情況下,Julia 更像是為數(shù)學(xué)量身定制的。相比 Python,Julia 的運算符更像 R,這是一個顯著的優(yōu)勢。大部分的線性代數(shù)運算可以用更少的時間和精力去完成。

眾所周知,近年來 Python 在機器學(xué)習(xí)和數(shù)據(jù)科學(xué)領(lǐng)域占據(jù)主導(dǎo)地位。因為在 Python 中我們可以使用各種各樣的第三方庫來幫助我們編寫機器學(xué)習(xí)的代碼。雖然 Python 有這么多優(yōu)勢,但仍有一個主要的缺點——它是一門解釋性語言,速度非常慢?,F(xiàn)在是數(shù)據(jù)時代,數(shù)據(jù)越多我們處理它的時間就越長,這也是 Julia 出現(xiàn)的理由。

到目前為止,有關(guān) Julia 的研究工作都集中在高性能或者 Julia 的科學(xué)計算能力等主題上。但在這里,我們將討論 Julia 不僅能夠有效地處理復(fù)雜的科學(xué)計算,還能夠處理基于商業(yè)的問題,以及像 Python 一樣處理機器學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)。

實驗?zāi)繕?biāo)與實驗設(shè)計

Julia 像 Python 一樣簡潔,但卻像 C 一樣是一門編譯語言。首先我們來測試 Julia 要比 Python 快多少。為此,我們先在一些簡單的程序上測試它們,然后來到我們實驗的重點,測試它們的機器學(xué)習(xí)和深度學(xué)習(xí)能力。

Julia 和 Python 都提供了許多庫和開源的基準(zhǔn)測試工具。為了在 Julia 中進(jìn)行基準(zhǔn)測試和計算時間,我們使用了 ??CPUTime?? 和 ??time?? 庫;對于 Python,我們同樣使用了 ??time?? 模塊。

矩陣乘法

一開始我們嘗試了簡單的算術(shù)運算,但由于這些運算不會產(chǎn)生太大的時間差異,我們決定比較矩陣乘法的時間差異。我們創(chuàng)建了兩個 ??(10 * 10)?? 的隨機浮點數(shù)矩陣,并對它們施以點積。眾所周知,Python 有一個 ??Numpy?? 庫,常被用于計算矩陣和向量。而 Julia 也有一個 ??LinearAlgebra?? 庫,常用于計算矩陣和向量。因此我們分別比較了各自使用和不使用庫的矩陣乘法的耗時。本文用到的所有源碼已經(jīng)放在了 ??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 秒,使用循環(huán)耗時 0.000001 秒。

使用 Python 編寫相同的矩陣乘法程序如下。 從結(jié)果可以發(fā)現(xiàn),與不使用庫相比,使用庫的程序花費的時間更少:

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 秒,使用循環(huán)耗時 0.0015 秒。

線性搜索

我們進(jìn)行的下一個實驗是對十萬個隨機生成的數(shù)字進(jìn)行線性搜索。這里使用了兩種方法,一種是使用 ??for?? 循環(huán),另一種是使用運算符。我們使用 1 到 1000 的整數(shù)執(zhí)行了 1000 次搜索,正如你在下面的輸出中看到的那樣,我們還打印了我們在數(shù)據(jù)集中找到了多少個整數(shù)。下面給出了使用循環(huán)和使用 ??IN?? 運算符的時間。這里我們使用了 CPU 3 次運行時間的中位數(shù)。

使用 Julia 編寫的程序和運行結(jié)果如下:

(LCTT 譯注:此處原文缺失 Julia 代碼)

使用 Python 編寫的程序和運行結(jié)果如下:

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

從以上結(jié)果來看,在 Julia 中使用循環(huán)和運算符并不會產(chǎn)生顯著的時間差異。但是在 Python 中循環(huán)幾乎比運算符 IN 多花了三倍的時間。有趣的是,在這兩種情況下,Julia 都比 Python 快得多。

線性回歸

下一個實驗是測試機器學(xué)習(xí)算法。我們選擇了以一種最常見和最簡單的機器學(xué)習(xí)算法,使用簡單數(shù)據(jù)集的線性回歸。我們使用了一個包含 237 條數(shù)據(jù)的數(shù)據(jù)集 “Head Brain”,數(shù)據(jù)集的兩列分別為 “HeadSize” 和 “BrainWeight”。接下來,我們使用 “head size” 數(shù)據(jù)去計算 “brain weight”。在 Python 和 Julia 中我們都沒有使用第三方庫,而是從零實現(xiàn)了線性回歸算法。

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 所花費的時間。

邏輯回歸

接下來,我們使用兩種語言的庫對最常見的機器學(xué)習(xí)算法(即邏輯回歸)進(jìn)行了實驗。對于 Python 我們使用最常見的庫 ??sklearn??;對于 Julia,我們使用 ??GLM?? 庫。我們在這里用到的數(shù)據(jù)集是有關(guān)銀行客戶的信息,其中包含 10,000 個數(shù)據(jù)條目。目標(biāo)變量是一個二元變量,區(qū)分消費者是否繼續(xù)使用銀行賬戶。

下面給出了 Julia 進(jìn)行邏輯回歸所花費的時間:

@time log_rec()

0.027746 seconds (3.32 k allocations: 10.947 MiB)

下面給出了 Python 進(jìn)行邏輯回歸所花費的時間:

gc.collect()

start = process_time()

LogReg()

end = process_time()

print(end-start)


Accuracy : 0.8068

0.34901400000000005

神經(jīng)網(wǎng)絡(luò)

在各種程序和數(shù)據(jù)集上測試這兩種語言后,我們在神經(jīng)網(wǎng)絡(luò)上使用 MNIST 數(shù)據(jù)集繼續(xù)測試它們。該數(shù)據(jù)集包含從零到九的手繪數(shù)字的灰度圖像。每張圖像為 28×28 像素。每個像素值表示該像素的亮度或暗度,該值是包含 0 到 255 之間的整數(shù)。該數(shù)據(jù)還包含一個標(biāo)簽列,該列表示在相關(guān)圖像中繪制的數(shù)字。

Figure 1: Example of MNIST data set

圖 1 是 MNIST 數(shù)據(jù)集的示例。

對兩種語言我們都建立了一個簡單的神經(jīng)網(wǎng)絡(luò)來測試它們耗費的時間。神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)如下:

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

該神經(jīng)網(wǎng)絡(luò)包含了一個輸入層、隱層還有輸出層。為了避免神經(jīng)網(wǎng)絡(luò)的復(fù)雜度過高,我們對數(shù)據(jù)集沒有進(jìn)行任何的預(yù)處理工作。在 Julia 和 Python 中我們都進(jìn)行了40次訓(xùn)練并比較它們的時間差異。

Figure 2: Julia takes 5.76 seconds in a neural network

在 Julia 中,??Flux?? 庫通常被用于建立神經(jīng)網(wǎng)絡(luò);在 Python 中我們常使用 ??Keras?? 庫。圖 2 展示了 Julia 在神經(jīng)網(wǎng)絡(luò)上的耗時。圖 3 展示了 Python 的神經(jīng)網(wǎng)絡(luò)經(jīng)過了若干次訓(xùn)練的耗時。

Figure 3: Python takes 110.3 seconds in a neural network

這個結(jié)果展示了 Julia 和 Python 在處理神經(jīng)網(wǎng)絡(luò)時存在巨大的時間差異。

表 1 總結(jié)了此次實驗的測試結(jié)果并計算了 Julia 和 Python 時間差異的百分比。

實驗

Julia(秒)

Python(秒)

時間差(%)

矩陣乘法(不使用庫)

0.000001

0.0015

99.9

矩陣乘法(使用庫)

0.000017

0.0013

98.69

線性搜索(使用循環(huán))

0.42

16.4

97.43

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

0.43

6.2

93.06

線性回歸

0.000718

0.00718

90

邏輯回歸

0.025

0.34901

92.83

神經(jīng)網(wǎng)絡(luò)

5.76

110.3

94.77

我們進(jìn)行的所有實驗都表明,隨著程序復(fù)雜性以及數(shù)據(jù)集大小的增加,Julia 和 Python 之間的執(zhí)行時間差異也會增加。由這個結(jié)果我們可以推斷,Julia 是一門更適合機器學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)的編程語言。


分享標(biāo)題:Julia和Python,哪一個更快?
轉(zhuǎn)載來源:http://www.5511xx.com/article/dhpejdc.html