最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中Numba庫裝飾器的具體使用

 更新時間:2024年01月28日 16:27:46   作者:知識在于積累  
Numba是一個針對Python的開源JIT編譯器,使用Numba非常方便,只需要在Python原生函數(shù)上增加一個裝飾器,本文主要介紹了Python中Numba庫裝飾器的具體使用,感興趣的可以了解一下

一、運行速度是Python天生的短板

在這里插入圖片描述

1.1 編譯型語言:C++

對于編譯型語言,開發(fā)完成以后需要將所有的源代碼都轉(zhuǎn)換成可執(zhí)行程序,比如 Windows 下的.exe文件,可執(zhí)行程序里面包含的就是機器碼。只要我們擁有可執(zhí)行程序,就可以隨時運行,不用再重新編譯了,也就是“一次編譯,無限次運行”。
在運行的時候,我們只需要編譯生成的可執(zhí)行程序,不再需要源代碼和編譯器了,所以說編譯型語言可以脫離開發(fā)環(huán)境運行。
編譯型語言一般是不能跨平臺的,也就是不能在不同的操作系統(tǒng)之間隨意切換。

1.2 解釋型語言:Python

對于解釋型語言,每次執(zhí)行程序都需要一邊轉(zhuǎn)換一邊執(zhí)行,用到哪些源代碼就將哪些源代碼轉(zhuǎn)換成機器碼,用不到的不進行任何處理。每次執(zhí)行程序時可能使用不同的功能,這個時候需要轉(zhuǎn)換的源代碼也不一樣。
因為每次執(zhí)行程序都需要重新轉(zhuǎn)換源代碼,所以解釋型語言的執(zhí)行效率天生就低于編譯型語言,甚至存在數(shù)量級的差距。計算機的一些底層功能,或者關(guān)鍵算法,一般都使用 C/C++ 實現(xiàn),只有在應(yīng)用層面(比如網(wǎng)站開發(fā)、批處理、小工具等)才會使用解釋型語言。
在運行解釋型語言的時候,我們始終都需要源代碼和解釋器,所以說它無法脫離開發(fā)環(huán)境。

1.3 速度對比:C++比Python快25倍

我不會C++語言、也沒有C++語言的運行的環(huán)境,借用網(wǎng)友的對比結(jié)果:

在這里插入圖片描述

編譯后,運行C++代碼,生成全部13-mers共6700萬個大約需要2.42秒。這意味著運行相同算法,Python用時是C++的25倍多。

二、Numba使用與否的對比,計算1000萬以內(nèi)的素數(shù)

2.1 原生Python,計算1000萬以內(nèi)的素數(shù)

def U27_1000W以內(nèi)的素數(shù)():
    import math
    import time

    def is_prime(num):
        if num == 2:
            return True
        if num <= 1 or num % 2 == 0:
            return False
        for div in range(3, int(math.sqrt(num) + 1), 2):
            if num % div == 0:
                return False
        return True

    def run_program(N):
        total = 0
        for i in range(N):
            if is_prime(i):
                total += 1
        return total

    # if __name__ == "__main__":
    N = 10000000
    start = time.time()
    total = run_program(N)
    end = time.time()
    print(f"1000萬以內(nèi)所有的素數(shù)有 {total} 個")
    print(f"純Python耗時: {end - start} 秒\b")
    return end - start

2.2 Numba裝飾器,計算1000萬以內(nèi)的素數(shù)

def U28_1000W以內(nèi)的素數(shù)_Numba裝飾器():
    import math
    import time
    from numba import njit, prange

    # @njit 相當(dāng)于 @jit(nopython=True) 
    @njit
    def is_prime(num):
        if num == 2:        # 2為素數(shù)
            return True
        if num <= 1 or num % 2 == 0:     # 偶數(shù)中除了2都不是素數(shù)
            return False
        for div in range(3, int(math.sqrt(num) + 1), 2):
            if num % div == 0:
                return False
        return True

    #使用Numba的prange來進行并發(fā)循環(huán)計算
    @njit(parallel = True)
    def run_program(N):
        total = 0
        #使用Numba提供的prange參數(shù)來進行并行計算
        for i in prange(N):
            if is_prime(i):
                total += 1
        return total

    # if __name__ == "__main__":
    N = 10000000
    start = time.time()
    total = run_program(N)
    end = time.time()
    print(f"1000萬以內(nèi)所有的素數(shù)有 {total} 個")
    print(f"Numba裝飾器耗時: {end - start} 秒\b")
    return end - start

2.3 實測速度:使用numba裝飾器,速度提升 22.0 倍,逼近C++

t0 = U27_1000W以內(nèi)的素數(shù)()
t1 = U28_1000W以內(nèi)的素數(shù)_Numba裝飾器()
print(f'使用numba裝飾器,速度提升 {round(t0/t1, 0)} 倍')


1000萬以內(nèi)所有的素數(shù)有 664579 個
純Python耗時: 86.78110885620117 秒
1000萬以內(nèi)所有的素數(shù)有 664579 個
Numba裝飾器耗時: 3.9410934448242188 秒
使用numba裝飾器,速度提升 22.0 倍

三、素數(shù)算法

質(zhì)數(shù)也就是大于1的整數(shù)中,除了1和它本身以外不能被其他整數(shù)整除的數(shù),也叫素數(shù)。

# 算法一:針對輸入的數(shù)字x,我們可以遍歷從2到x-1這個區(qū)間中的數(shù),如果x能被這個區(qū)間中任意一個數(shù)整除,那么它就不是質(zhì)數(shù)。
def is_prime1(x):
    for i in range(2, x):
        if x % i == 0:
            return False
    return True

# 算法二:對算法一的優(yōu)化,事實上只需要遍歷從2到√x即可。
def is_prime2(x):
    for i in range(2, int(x ** 0.5) + 1):
        if x % i == 0:
            return False
    return True

# 算法三:偶數(shù)中除了2都不是質(zhì)數(shù),且奇數(shù)的因數(shù)也沒有偶數(shù),因此可以進一步優(yōu)化。
def is_prime3(x):
    if x == 2:
        return True
    elif x % 2 == 0:
        return False
    for i in range(3, int(x ** 0.5) + 1, 2):
        if x % i == 0:
            return False
    return True

# 算法四:任何一個自然數(shù),總可以表示成以下六種形式之一:6n,6n+1,6n+2,6n+3,6n+4,6n+5(n=0,1,2...)我們可以發(fā)現(xiàn),除了2和3,只有形如6n+1和6n+5的數(shù)有可能是質(zhì)數(shù)。且形如6n+1和6n+5的數(shù)如果不是質(zhì)數(shù),它們的因數(shù)也會含有形如6n+1或者6n+5的數(shù),因此可以得到如下算法:
def is_prime4(x):
    if (x == 2) or (x == 3):
        return True
    if (x % 6 != 1) and (x % 6 != 5):
        return False
    for i in range(5, int(x ** 0.5) + 1, 6):
        if (x % i == 0) or (x % (i + 2) == 0):
            return False
    return True

四、Numba

4.1 官方文檔

numba 是一款可以將 python 函數(shù)編譯為機器代碼的JIT編譯器,經(jīng)過 numba 編譯的python 代碼(僅限數(shù)組運算),其運行速度可以接近 C 或 FORTRAN 語言。
官方文檔鏈接:http://numba.pydata.org/numba-doc/latest/index.html

到此這篇關(guān)于Python中Numba庫裝飾器的具體使用的文章就介紹到這了,更多相關(guān)Python Numba庫裝飾器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python 實現(xiàn)視頻 圖像幀提取

    python 實現(xiàn)視頻 圖像幀提取

    今天小編就為大家分享一篇python 實現(xiàn)視頻 圖像幀提取,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python模塊詳解之pywin32使用文檔(python操作windowsAPI)

    python模塊詳解之pywin32使用文檔(python操作windowsAPI)

    pywin32是一個第三方模塊庫,主要的作用是方便python開發(fā)者快速調(diào)用windows API的一個模塊庫,這篇文章主要給大家介紹了關(guān)于python模塊詳解之pywin32使用文檔的相關(guān)資料,文中將python操作windowsAPI介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • Python使用FFmpeg實現(xiàn)高效音頻格式轉(zhuǎn)換工具

    Python使用FFmpeg實現(xiàn)高效音頻格式轉(zhuǎn)換工具

    在數(shù)字音頻處理領(lǐng)域,音頻格式轉(zhuǎn)換是一項基礎(chǔ)但至關(guān)重要的功能,本文主要為大家介紹了Python如何使用FFmpeg實現(xiàn)強大功能的圖形化音頻轉(zhuǎn)換工具,需要的可以了解下
    2025-05-05
  • Python進行JSON數(shù)據(jù)處理的全攻略

    Python進行JSON數(shù)據(jù)處理的全攻略

    JSON是“JavaScript Object Notation”的縮寫,它本來是JavaScript語言中創(chuàng)建對象的一種字面量語法,現(xiàn)在已經(jīng)被廣泛的應(yīng)用于跨語言跨平臺的數(shù)據(jù)交換,下面我們就來看看Python進行JSON數(shù)據(jù)處理的相關(guān)策略吧
    2025-07-07
  • 舉例講解Python中is和id的用法

    舉例講解Python中is和id的用法

    這篇文章主要介紹了舉例講解Python中is和id的用法,是Python學(xué)習(xí)當(dāng)中的基礎(chǔ)知識,作者舉例進行了簡單說明,需要的朋友可以參考下
    2015-04-04
  • Pytorch運行過程中解決出現(xiàn)內(nèi)存不足的問題

    Pytorch運行過程中解決出現(xiàn)內(nèi)存不足的問題

    內(nèi)存不足是很多人感到頭疼的問題,本文主要介紹了Pytorch運行過程中解決出現(xiàn)內(nèi)存不足的問題,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • Python中使用HTMLParser解析html實例

    Python中使用HTMLParser解析html實例

    這篇文章主要介紹了Python中使用HTMLParser解析html實例,本文直接給出使用示例,并總結(jié)出HTMLParser含有的方法分為兩類,一類是需要顯式調(diào)用的,而另一類不需顯示調(diào)用,需要的朋友可以參考下
    2015-02-02
  • python多行字符串拼接使用小括號的方法

    python多行字符串拼接使用小括號的方法

    今天小編就為大家分享一篇python多行字符串拼接使用小括號的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python中的OpenCV圖像腐蝕處理和膨脹處理

    Python中的OpenCV圖像腐蝕處理和膨脹處理

    這篇文章主要介紹了Python中的OpenCV圖像腐蝕處理和膨脹處理,OpenCV是一個跨平臺的計算機視覺庫,可用于開發(fā)實時的圖像處理、計算機視覺以及模式識別程序,需要的朋友可以參考下
    2023-08-08
  • Python網(wǎng)絡(luò)編程之socket與socketserver

    Python網(wǎng)絡(luò)編程之socket與socketserver

    這篇文章介紹了Python網(wǎng)絡(luò)編程之socket與socketserver,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05

最新評論

鄂托克旗| 眉山市| 青龙| 兰考县| 中宁县| 乌兰浩特市| 于田县| 固原市| 临夏县| 广平县| 西藏| 玉溪市| 宣威市| 邛崃市| 岐山县| 抚顺市| 军事| 康乐县| 民权县| 突泉县| 科尔| 济源市| 静宁县| 巩义市| 临江市| 张北县| 梅州市| 固阳县| 永州市| 二手房| 莱西市| 荔波县| 海安县| 育儿| 沾化县| 桃园县| 新丰县| 渑池县| 平阳县| 霍山县| 壤塘县|