第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

對 Java、Groovy、Jython 和 Python 進行基準測試

對 Java、Groovy、Jython 和 Python 進行基準測試

千萬里不及你 2022-05-12 18:52:01
我正在嘗試對 PI (3.14159) 飛鏢的蒙特卡洛計算進行基準測試。我已經(jīng)用 Java、Groovy、BeanShell、Julia、Jython 和 Python(Python2 用 C 實現(xiàn))實現(xiàn)了我的代碼。這是我的原始 Java 代碼“MonteCarloPI.java”:import java.util.Random; public class MonteCarloPI {     public static void main(String[] args)       {         int nThrows = 0;         int nSuccess = 0;         double x, y;         long then = System.nanoTime();         int events=(int)1e8;         Random r = new Random();          for (int i = 0; i < events; i++) {            x = r.nextFloat();      // Throw a dart            y = r.nextFloat();            nThrows++;            if ( x*x + y*y <= 1 )  nSuccess++;       } double itime = ((System.nanoTime() - then)/1e9); System.out.println("Time for calculations (sec): " + itime+"\n"); System.out.println("Pi = " + 4*(double)nSuccess/(double)nThrows +"\n");      }}這是文件“MonteCarloPI.groovy”中的 Groovy 代碼:import java.util.Randomint nThrows = 0int nSuccess = 0double x, ylong then = System.nanoTime()int events=1e8r = new Random()for (int i = 0; i < events; i++) {            x = r.nextFloat()      // Throw a dart            y = r.nextFloat()            nThrows++            if ( x*x + y*y <= 1 )  nSuccess++}itime = ((System.nanoTime() - then)/1e9)System.out.println("Time for calculations (sec): " + itime+"\n")System.out.println("Pi = " + 4*(double)nSuccess/(double)nThrows +"\n")       或者,我刪除了諸如“float”和“int”(即松散類型)之類的定義。這使用“松散”類型檢查性能。我已將“MonteCarloPI.groovy”重命名為 BeanShell 腳本文件“MonteCarloPI.bsh”(BeanShell 的語法與 Groovy 非常相似)對于標準 Python 語言,代碼“MonteCarloPI_CPython.py”如下所示:import random,timenThrows,nSuccess = 0,0then = time.time()events=int(1e8)for i in xrange(events):   x,y = random.random(),random.random();   # Throw a dart                      nThrows +=1   if ( x*x + y*y <= 1 ):  nSuccess+=1itime = time.time() - thenprint ("Time: ",itime,"sec Pi = ",4*nSuccess/float(nThrows))此代碼在 CPython 2.7.18(用 C 實現(xiàn)的 Python)或 Jython 2.7.2(Java 實現(xiàn))中執(zhí)行。對于 Python 3.8.3(“Python3”),將“xrange”替換為“range”。
查看完整描述

2 回答

?
人到中年有點甜

TA貢獻1895條經(jīng)驗 獲得超7個贊

不錯的作品。有趣的比較你已經(jīng)到了那里。作為一名 python 開發(fā)人員,我想添加一些關于 Python 的額外視圖。


我認為它較慢主要是因為動態(tài)類型。另一個原因是您正在計算標量值(即使用 for 循環(huán)并一次計算一個數(shù)字)。Python 的優(yōu)點之一是使用 NumPy 庫的向量計算(這允許同時計算多個數(shù)字)。所以,這是我的算法實現(xiàn)。注意:我使用的是 python 3.6。


import numpy as np

import time


start = time.time()


events = int(1e8)

nThrows, nSuccess = 0, 0


x, y = np.random.uniform(size=(2, events))

nSuccess = (x*x + y*y <= 1).sum()

nThrows = events

pi = 4*nSuccess/float(nThrows)


stop = time.time()

print('Time: {}, Pi = {}'.format(stop-start, pi))

以下是我的 i7 x64 計算機 (Windows 10) 上的基準測試結果:


Python (original code):      42.6s  Pi = 3.1414672

Python (my optimized code):  4.7s   Pi = 3.1417642

如您所見,在我的計算機上運行的原始 python 代碼比您計算機上的 python 代碼慢。因此,優(yōu)化后的版本可能比 Java 或 Groovy 更快。


希望這可以幫助。


查看完整回答
反對 回復 2022-05-12
?
慕斯709654

TA貢獻1840條經(jīng)驗 獲得超5個贊

對于 Julia 代碼,您在基準測試中包含編譯時間。另一件需要注意的事情是您正在使用全局變量,眾所周知這會降低性能。使用您的基準版本,我的機器上的執(zhí)行時間是 17.7 秒。將所有內容移到一個函數(shù)中,我得到了 0.83 秒。從中刪除編譯時間使我降至 713.625 毫秒。我的代碼的最終版本是這個(注意你在循環(huán)中計算了一個太多)。


using Random

using BenchmarkTools


function benchmark()

    nThrows = 0

    nSuccess = 0

    events = 100_000_000

    for j in 1:events

            x = rand()      #  Throw a dart

            y = rand()

            nThrows += 1

            if  x^2 + y^2 <= 1

                nSuccess += 1

            end

    end

    4.0*nSuccess/nThrows

end


pi = @btime benchmark()

println( "Pi = ",  pi)

請注意,進一步的改進是可能的。在循環(huán)之外分配一個隨機數(shù)數(shù)組而不是每次迭代調用 rand 兩次可能是有益的。您可以在此處找到其他性能提示:https ://docs.julialang.org/en/v1/manual/performance-tips/


查看完整回答
反對 回復 2022-05-12
  • 2 回答
  • 0 關注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號