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

python中的腳本性能分析

 更新時間:2022年11月03日 10:58:26   作者:勤奮的大熊貓  
這篇文章主要介紹了python中的腳本性能分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

python腳本性能分析

首先使用cd進入需要測試的腳本文件對應的目錄,然后再使用如下代碼完成對腳本的性能測試。

# enter the directory of document
cd (file directory)
# use pdb library for debuging
python -m cProfile test.py

我們可以看到我們獲取到了每一步操作所需要的時間。

對于如何測試單行代碼運行時間,可以看這篇python 代碼運行時間獲取方式(超鏈接點擊跳轉(zhuǎn))。

python性能分析技巧

當我們開始精通編程語言時,我們不僅希望實現(xiàn)最終的編程目標,而且還希望可以使我們的程序更高效。

在本文中,我們將學習一些Ipython的命令,這些命令可以幫助我們對Python代碼進行時間分析。

注意,在本教程中,我建議使用Anaconda。

1.分析一行代碼

要檢查一行python代碼的執(zhí)行時間,請使用**%timeit**。下面是一個簡單的例子來了解它的工作原理:

#### magics命令%timeit的簡單用法%timeit [num for num in range(20)]
#### 輸出1.08 μs ± 43 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

主要注意事項:

  • 在要分析的代碼行之前使用%timeit
  • 它返回代碼運行的平均值和標準偏差。在上面的示例中,執(zhí)行了7次,每次執(zhí)行對該代碼循環(huán)100萬次(默認行為),這需要平均1.08微秒和43納秒的標準偏差。
  • 在調(diào)用magic命令時,可以自定義運行和循環(huán)的數(shù)量,示例如下:
#### 在%timeit magic命令中自定義運行和循環(huán)數(shù)%timeit -r5 -n100 [num for num in range(20)]
1.01 μs ± 5.75 ns per loop (mean ± std. dev. of 5 runs, 100 loops each)

使用命令選項-r和-n,分別表示執(zhí)行次數(shù)和循環(huán)次數(shù),我們將時間配置文件操作定制為執(zhí)行5次和循環(huán)100次。

2.分析多行代碼

本節(jié)向前邁進了一步,并解釋了如何分析完整的代碼塊。通過對%timeit magic命令進行一個小的修改,將單百分比(%)替換為雙百分比(%%),就可以分析一個完整的代碼塊。以下為示例演示,供參考:

#### 使用timeblock%%代碼分析%%timeit -r5 -n1000for i in range(10): ? ?n = i**2 ? ?m = i**3 ? ?o = abs(i)
#### 輸出10.5 μs ± 226 ns per loop (mean ± std. dev. of 5 runs, 1000 loops each)

可以觀察到for循環(huán)的平均執(zhí)行時間為10.5微秒。請注意,命令選項-r和-n分別用于控制執(zhí)行次數(shù)和循環(huán)次數(shù)。

3.代碼塊中的每一行代碼進行時間分析

到目前為止,我們只在分析一行代碼或代碼塊時查看摘要統(tǒng)計信息,如果我們想評估代碼塊中每一行代碼的性能呢?使用Line_profiler 。

Line_profiler 包可用于對任何函數(shù)執(zhí)行逐行分析。要使用line_profiler軟件包,請執(zhí)行以下步驟:

安裝—Line_profiler 包可以通過簡單的調(diào)用pip或conda Install來安裝。如果使用的是針對Python的anaconda發(fā)行版,建議使用conda安裝

#### 安裝line_profiler軟件包conda install line_profiler

加載擴展—一旦安裝,你可以使用IPython來加載line_profiler:

#### 加載line_profiler的Ipython擴展%load_ext line_profiler

時間分析函數(shù)—加載后,使用以下語法對任何預定義函數(shù)進行時間分析

%lprun -f function_name_only function_call_with_arguments

語法細節(jié):

  • 對line_profiler的調(diào)用以關(guān)鍵字%lprun開始,后跟命令選項-f
  • 命令選項之后是函數(shù)名,然后是函數(shù)調(diào)用

在本練習中,我們將定義一個接受高度(以米為單位)和重量(以磅為單位)列表的函數(shù),并將其分別轉(zhuǎn)換為厘米和千克。

#### 定義函數(shù)def conversion(ht_mtrs, wt_lbs ): ? ?ht_cms = [ht*100 for ht in ht_mtrs] ? ?wt_kgs = [wt*.4535 for wt in wt_lbs]
#### 定義高度和重量列表:ht = [5,5,4,7,6]wt = [108, 120, 110, 98]
#### 使用line_profiler分析函數(shù)%lprun -f conversion conversion(ht,wt)
---------------------------------------------------------------#### 輸出Total time: 1.46e-05 s
File: <ipython-input-13-41e195af43a9>
Function: conversion at line 2
Line # ? ? ?Hits ? ? ? ? Time ?Per Hit ? % Time ?Line Contents============================================================== ? ? 2 ? ? ? 1 ? ? ? ?105.0 ? ?105.0 ? ? 71.9 ? ? ?ht_cms = [ht*100 for ht in ht_mtrs] ? ? 3 ? ? ? 1 ? ? ? ? 41.0 ? ? 41.0 ? ? 28.1 ? ? ?wt_kgs = [wt*.4535 for wt in wt_lbs]

輸出詳細信息:

  • 以14.6微秒為單位(參考第一行輸出)

生成的表有6列:

  • 第1列(行#)—代碼的行號(請注意,第#1行是故意從輸出中省略的,因為它只是函數(shù)定義語句)
  • 第2列(命中)—調(diào)用該行的次數(shù)
  • 第3列(時間)—在代碼行上花費的時間單位數(shù)(每個時間單位為14.6微秒)
  • 第4列(每次命中平均時間)—第3列除以第2列
  • 第5列(%Time)—在所花費的總時間中,花在特定代碼行上的時間百分比是多少
  • 第6列(內(nèi)容)—代碼行的內(nèi)容

你可以清楚地看到,高度從米到厘米的轉(zhuǎn)換幾乎占了總時間的72%。

利用每一行代碼的執(zhí)行時間,我們可以部署策略來提高代碼的效率。以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 深度學習環(huán)境配置之Anaconda安裝和pip源方式

    深度學習環(huán)境配置之Anaconda安裝和pip源方式

    這篇文章主要介紹了深度學習環(huán)境配置之Anaconda安裝和pip源方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • python使用for...else跳出雙層嵌套循環(huán)的方法實例

    python使用for...else跳出雙層嵌套循環(huán)的方法實例

    這篇文章主要給大家介紹了關(guān)于python使用for...else跳出雙層嵌套循環(huán)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用python具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2020-05-05
  • python中telnetlib模塊的使用方式

    python中telnetlib模塊的使用方式

    這篇文章主要介紹了python中telnetlib模塊的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Python更換pip源方法過程解析

    Python更換pip源方法過程解析

    這篇文章主要介紹了Python更換pip源方法過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • 分析python切片原理和方法

    分析python切片原理和方法

    這篇文章主要通過代碼實例給大家詳細介紹了python切片原理和方法,有興趣的朋友跟著學習下吧。
    2017-12-12
  • Python datetime和unix時間戳之間相互轉(zhuǎn)換的講解

    Python datetime和unix時間戳之間相互轉(zhuǎn)換的講解

    今天小編就為大家分享一篇關(guān)于Python datetime和unix時間戳之間相互轉(zhuǎn)換的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • keras輸出預測值和真實值方式

    keras輸出預測值和真實值方式

    這篇文章主要介紹了keras輸出預測值和真實值方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python實現(xiàn)定時任務的八種方式總結(jié)

    python實現(xiàn)定時任務的八種方式總結(jié)

    在日常工作中,我們常常會用到需要周期性執(zhí)行的任務,下面這篇文章主要給大家介紹了關(guān)于python實現(xiàn)定時任務的八種方式,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • python中的decimal類型轉(zhuǎn)換實例詳解

    python中的decimal類型轉(zhuǎn)換實例詳解

    decimal 模塊實現(xiàn)了定點和浮點算術(shù)運算符,使用的是大多數(shù)人所熟悉的模型,而不是程序員熟悉的模型,即大多數(shù)計算機硬件實現(xiàn)的 IEEE 浮點數(shù)運算。這篇文章主要介紹了python里的decimal類型轉(zhuǎn)換,需要的朋友可以參考下
    2019-06-06
  • Django靜態(tài)文件加載失敗解決方案

    Django靜態(tài)文件加載失敗解決方案

    這篇文章主要介紹了Django靜態(tài)文件加載失敗解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08

最新評論