欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何讓python的運(yùn)行速度得到提升

 更新時(shí)間:2020年07月08日 14:19:40   作者:silencement  
在本篇文章里小編給大家分享了關(guān)于如何讓python的運(yùn)行速度得到提升的方法和技巧,需要的朋友們可以學(xué)習(xí)下。

python一直被病垢運(yùn)行速度太慢,但是實(shí)際上python的執(zhí)行效率并不慢,慢的是python用的解釋器Cpython運(yùn)行效率太差。

“一行代碼讓python的運(yùn)行速度提高100倍”這絕不是嘩眾取寵的論調(diào)。

我們來(lái)看一下這個(gè)最簡(jiǎn)單的例子,從1一直累加到1億。

最原始的代碼:

import time
def foo(x,y):
  tt = time.time()
  s = 0
  for i in range(x,y):
    s += i
  print('Time used: {} sec'.format(time.time()-tt))
  return s
print(foo(1,100000000))

結(jié)果

Time used: 6.779874801635742 sec
4999999950000000

是不是快了100多倍呢?

那么下面就分享一下“為啥numba庫(kù)的jit模塊那么牛掰?”

NumPy的創(chuàng)始人Travis Oliphant在離開(kāi)Enthought之后,創(chuàng)建了CONTINUUM,致力于將Python大數(shù)據(jù)處理方面的應(yīng)用。最近推出的Numba項(xiàng)目能夠?qū)⑻幚鞱umPy數(shù)組的Python函數(shù)JIT編譯為機(jī)器碼執(zhí)行,從而上百倍的提高程序的運(yùn)算速度。

Numba項(xiàng)目的主頁(yè)上有Linux下的詳細(xì)安裝步驟。編譯LLVM需要花一些時(shí)間。

Windows用戶可以從Unofficial Windows Binaries for Python Extension Packages下載安裝LLVMPy、meta和numba等幾個(gè)擴(kuò)展庫(kù)。

下面我們看一個(gè)例子:

import numba as nb
from numba import jit
@jit('f8(f8[:])')
def sum1d(array):
 s = 0.0
 n = array.shape[0]
 for i in range(n):
  s += array[i]
 return s
import numpy as np
array = np.random.random(10000)
%timeit sum1d(array)
%timeit np.sum(array)
%timeit sum(array)
10000 loops, best of 3: 38.9 us per loop
10000 loops, best of 3: 32.3 us per loop
100 loops, best of 3: 12.4 ms per loop

numba中提供了一些修飾器,它們可以將其修飾的函數(shù)JIT編譯成機(jī)器碼函數(shù),并返回一個(gè)可在Python中調(diào)用機(jī)器碼的包裝對(duì)象。為了能將Python函數(shù)編譯成能高速執(zhí)行的機(jī)器碼,我們需要告訴JIT編譯器函數(shù)的各個(gè)參數(shù)和返回值的類型。我們可以通過(guò)多種方式指定類型信息,在上面的例子中,類型信息由一個(gè)字符串'f8(f8[:])'指定。其中'f8'表示8個(gè)字節(jié)雙精度浮點(diǎn)數(shù),括號(hào)前面的'f8'表示返回值類型,括號(hào)里的表示參數(shù)類型,'[:]'表示一維數(shù)組。因此整個(gè)類型字符串表示sum1d()是一個(gè)參數(shù)為雙精度浮點(diǎn)數(shù)的一維數(shù)組,返回值是一個(gè)雙精度浮點(diǎn)數(shù)。

內(nèi)容擴(kuò)展:

Python運(yùn)行速度提升

相比較C,C++,python一直被抱怨運(yùn)行速度很慢,實(shí)際上python的執(zhí)行效率并不慢,而是解釋器Cpython運(yùn)行效率很差。

通過(guò)使用numba庫(kù)的jit可以讓python的運(yùn)行速度提高百倍以上。

同諾簡(jiǎn)單累加,相乘的例子,可以看出。

#!/usr/bin/env python
# encoding: utf-8
'''
@author: Victor
@Company:華中科技大學(xué)電氣學(xué)院聚變與等離子研究所
@version: V1.0
@contact: 1650996069@qq.com 2018--2020
@software: PyCharm2018
@file: quickPython3.py
@time: 2018/9/21 20:54
@desc:使用numba的jit是python代碼運(yùn)行速度提高100倍左右
'''
'''平常運(yùn)行'''
import time
def add(x,y):
    tt = time.time()
    s = 0
    for i in range(x,y):
        s += i
    print('The time used: {} seconds'.format(time.time()-tt))
    return s
 
add(1,100000000)
##########結(jié)果###############
# D:\Python3\python.exe D:/Pycharm2018Works/InsteringPython3/SomeBasics/quickPython3.py
# The time used: 6.712835788726807 seconds
# Process finished with exit code 0
'''調(diào)用numba運(yùn)行'''
import time
from numba import jit
@jit
def add(x,y):
    tt = time.time()
    s = 0
    for i in range(x,y):
        s += i
    print('The time used: {} seconds'.format(time.time()-tt))
    return s
 
add(1,100000000)
##########結(jié)果###############
# D:\Python3\python.exe D:/Pycharm2018Works/InsteringPython3/SomeBasics/quickPython3.py
# The time used: 0.06396007537841797 seconds
# 
# Process finished with exit code 0

Numba模塊能夠?qū)⑻幚鞱umPy數(shù)組的Python函數(shù)JIT編譯為機(jī)器碼執(zhí)行,從而上百倍的提高程序的運(yùn)算速度。

相關(guān)文章

  • Python中.py文件打包成exe可執(zhí)行文件詳解

    Python中.py文件打包成exe可執(zhí)行文件詳解

    這篇文章主要給大家介紹了在Python中.py文件打包成exe可執(zhí)行文件的相關(guān)資料,文中介紹的非常詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-03-03
  • Python pip安裝如何切換國(guó)內(nèi)源

    Python pip安裝如何切換國(guó)內(nèi)源

    在Python開(kāi)發(fā)中,pip是一個(gè)非常重要的工具,它允許我們安裝和管理Python包,本文將介紹如何切換pip的國(guó)內(nèi)源,并推薦幾個(gè)常用的國(guó)內(nèi)源,感興趣的朋友一起看看吧
    2024-04-04
  • Python腳本化Git的操作詳解

    Python腳本化Git的操作詳解

    如何判定此次測(cè)試是否達(dá)標(biāo),代碼覆蓋率是衡量的標(biāo)準(zhǔn)之一,利用fastapi框架重寫了覆蓋率統(tǒng)計(jì)服務(wù),然后通過(guò)diff操作統(tǒng)計(jì)增量代碼覆蓋率,當(dāng)然要使用diff操作,避免不了與git打交道,那python如何操作gi t呢,本文將詳細(xì)介紹了Python腳本化Git的操作
    2024-03-03
  • Python輕松實(shí)現(xiàn)2位小數(shù)隨機(jī)生成

    Python輕松實(shí)現(xiàn)2位小數(shù)隨機(jī)生成

    在Python中,我們經(jīng)常需要生成隨機(jī)數(shù),特別是2位小數(shù)的隨機(jī)數(shù),這在模擬實(shí)驗(yàn)、密碼學(xué)、游戲開(kāi)發(fā)等領(lǐng)域都很有用,下面是如何在Python中生成2位小數(shù)的隨機(jī)數(shù)的代碼示例,需要的朋友可以參考下
    2023-11-11
  • 詳解如何在Apache中運(yùn)行Python WSGI應(yīng)用

    詳解如何在Apache中運(yùn)行Python WSGI應(yīng)用

    在生產(chǎn)環(huán)境上,一般會(huì)使用比較健壯的Web服務(wù)器,如Apache來(lái)運(yùn)行我們的應(yīng)用,本文中我們就會(huì)介紹如何使用Apache模塊mod_wsgi來(lái)運(yùn)行Python WSGI應(yīng)用。感興趣的小伙伴們可以參考一下
    2019-01-01
  • python數(shù)組和矩陣的用法解讀

    python數(shù)組和矩陣的用法解讀

    這篇文章主要介紹了python數(shù)組和矩陣的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 解讀pandas.DataFrame.corrwith

    解讀pandas.DataFrame.corrwith

    這篇文章主要介紹了解讀pandas.DataFrame.corrwith,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 淺析python協(xié)程相關(guān)概念

    淺析python協(xié)程相關(guān)概念

    本篇文章給大家分析了一下python協(xié)程的概念以及代碼相關(guān)實(shí)例,有興趣的朋友跟著小編學(xué)習(xí)下吧。
    2018-01-01
  • Python接口傳輸url與flask數(shù)據(jù)詳解

    Python接口傳輸url與flask數(shù)據(jù)詳解

    這篇文章主要介紹了Python通過(guò)接口傳輸url與flask數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-09-09
  • 對(duì)于Python中RawString的理解介紹

    對(duì)于Python中RawString的理解介紹

    下面小編就為大家?guī)?lái)一篇對(duì)于Python中RawString的理解介紹。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-07-07

最新評(píng)論