成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

1個小技巧,讓你的Python代碼運行效率提升17倍

開發 前端
我們都希望自己的代碼更高效,花最少的精力,寫出最好性能的代碼,這也是本文的目的,希望文章中的這個技巧能幫助到大家。

 Mandelbrot集是一個涉及位運算、遞歸和虛數的有趣的數學現象。由于它是一個復雜且計算多樣化的函數,對于如何提高代碼運行效率,是一個非常好的研究案例。

 

1個小技巧,讓你的Python代碼運行效率提升17倍

 

通過對函數mandelbrot_set函數進行運行計時,我們發現這個函數平均需要8秒鐘才能運行完成。

 

  1. import numpy as np 
  2.  
  3. def mandelbrot_set(width, height, zoom=1, x_off=0, y_off=0, niter=256): 
  4.     w,h = width, height 
  5.     pixels = np.arange(w*h, dtype=np.uint16).reshape(h, w) 
  6.     for x in range(w):  
  7.         for y in range(h): 
  8.             zx = 1.5*(x + x_off - 3*w/4)/(0.5*zoom*w) 
  9.             zy = 1.0*(y + y_off - h/2)/(0.5*zoom*h) 
  10.             z = complex(zx, zy) 
  11.             c = complex(0, 0) 
  12.             for i in range(niter): 
  13.                 if abs(c) > 4: break 
  14.                 c = c**2 + z 
  15.             color = (i << 21) + (i << 10)  + i * 8 
  16.             pixels[y,x] = color 

在代碼中加載Cython,效率提升25%

在這里,我們做一個簡單的更改:我們在一個單獨的單元中加載Cython,這是一個專用于在 C 和 Python 之間架起橋梁的轉換模塊。然后,在該單元格的頂部,鍵入 %% cython -a,觸發 Jupyter Notebook 的換行符,通過 Cython 運行代碼,Cython 會在后臺自動將Python代碼轉換為C。我們的函數 mandelbrot_set 可以在 Python 中調用,但將使用C結構運行。

再次運行我們更新的代碼,我們看到減少了近兩秒。幾乎什么都不做就能提高25%的運行效率!

在函數中聲明變量類型,運行效率提升17倍

不過,我們還有更好的辦法。當 Cython 嘗試將 Python 進程轉換為 C 結構時,它的運行速度就會受到限制。我們可以協助 Cython 加快運行的事情之一就是聲明在函數中使用的所有變量的變量類型,這樣可以更好地優化我們的代碼。

注意每個參數的數據類型是如何指定的(在這種情況下,所有數據類型都為 int )。如果一個變量是獨立創建的,則可以使用 cdef 關鍵字,然后使用數據類型和采用該類型的變量。從直接聲明的變量到范圍(n)中的 i in 的所有內容,都可以為 Cython 提供盡可能多的幫助。

重新運行使用了指定數據類型來進行更新后的函數,我們發現運行時間減少了很多,比原來的時間快 了17倍!

在 10 秒鐘內,僅修改了一個數據類型,我們的代碼效率就提高了 17 倍。雖然減少的時間只有幾秒,但這種方法如果應用于更長的代碼腳本中,節省的計算量那將是幾個小時。

 

工作原理

Cython是一個可以將 Python 編寫成更快、更高效的C語言的模塊。雖然Python的自由性和開放性促使了廣泛采用和開發,特別是在數據科學和其他重計算領域,但這種自由是以效率低下為代價的。在C語言中,編碼者有義務提供有關代碼執行的更多信息,這是一項可以加快處理速度的繁重工作。通過把我們的Python代碼寫成高效的 C 結構和方法,你可以讓它變得更高效,而且你甚至不需要知道C是什么!

cdef 關鍵字將變量聲明為靜態類型的 C 變量。使用這些C變量可以更快地執行代碼,因為變量本身具有指定的類型,而不是 Python 中具有類型的值。例如,在 Python 中,可以在一行中將相同的變量設置為整數,而在另一行中將其設置為字符串。例如,a =“ hello world”&a =1。但是,在 C 語言中,僅設置靜態類型的變量具有一種數據類型。

這種剛性意味著可以避免 Python 動態類型所需的巨大內存空間開銷。因為一個變量可以具有許多可能的值,所以需要分配更多的內存。另一方面,對靜態類型變量范圍的嚴格限制意味著內存空間和執行過程效率更高。如上所述,函數參數也可以聲明為靜態類型的C變量。

這就是為什么簡單地聲明變量類型會讓程序處理代碼的時間大大縮短。盡管還有許多其他方法可以使 Cython 更加高效地使用 Python 代碼,但最簡單,技術最少,回報最高的方法是寫出變量類型。

在你的腳本中有無數的Cython應用程序。

  • 下次如果你需要編寫逐行函數以應用于具有數千行的數據幀,進行復雜的數據處理時,記得使用 Cython 來縮短遍歷所有行的時間。
  • 如果你正在手寫數據轉換管道以應用復雜和/或條件增強,也要記得考慮能否在 Cython 中實現。
  • 在為神經網絡編寫自定義優化器或損失函數(或自我實現現有函數)時,使用 Cython 可以加快訓練過程。

 

責任編輯:華軒 來源: 今日頭條
相關推薦

2024-06-27 11:22:34

2021-02-05 16:20:54

代碼Linux技巧

2019-08-23 19:22:31

SQL語句效率提升數據庫

2024-01-08 17:09:07

Python解釋器CPython

2022-01-06 22:31:21

Python技巧代碼

2019-11-25 10:20:54

CSS代碼javascript

2020-04-20 17:43:28

Java代碼優化開發

2019-11-05 14:37:24

Java性能優化編程語言

2024-10-08 10:24:41

Python編程語言

2025-05-26 04:00:00

2024-10-10 11:49:27

2023-06-13 13:52:00

Java 7線程池

2016-10-09 20:07:43

2023-02-22 19:15:35

AI工具機器人

2014-08-11 12:54:27

構建模塊代碼審查編程

2019-05-10 14:50:09

Java代碼技巧

2023-05-31 07:24:48

2022-12-13 08:45:01

3F傾聽模型

2019-12-09 10:32:36

開源技術 趨勢

2024-04-29 06:50:45

Python代碼運行
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲在线看 | 粉嫩av在线| 久久久精品视频免费 | 久久精品一区 | 91污在线 | 四虎在线播放 | 麻豆精品久久久 | 欧美日韩一二三区 | 欧美一区二 | 麻豆av免费观看 | 呦呦在线视频 | 欧美精品一区在线发布 | 中文字幕亚洲视频 | 久久综合久色欧美综合狠狠 | 中国黄色毛片视频 | 91久久国产综合久久91精品网站 | 国产欧美日韩综合精品一区二区 | 玖玖综合网| 91精品国产91久久久久久最新 | 日本精品久久久久久久 | 国产精品永久在线观看 | 自拍视频网站 | 国产极品车模吞精高潮呻吟 | 91在线视频观看免费 | 在线看无码的免费网站 | 99这里只有精品 | 九九免费 | 在线欧美小视频 | 午夜精品一区 | www.青青草| 国产激情视频网址 | 国产一区二区免费 | 凹凸日日摸日日碰夜夜 | 午夜激情在线视频 | 97caoporn国产免费人人 | 欧美色综合 | 粉嫩av久久一区二区三区 | 日韩在线欧美 | 亚洲高清视频在线观看 | 欧美一区二区三区大片 | 成人在线播放网站 |