賈維斯的智慧工坊

  • Home
  • About
  • Note
  • Project
  • Experience
  • Service
  • Sitemap


MY | NOTES

  1. 首頁
  2. >
  3. 筆記
  4. >
  5. 分享

[Python] 速度比較:Numpy與內建函式 - 最大最小總合

Compare Numpy and Built-in min/max/sum Speed
May, 2019

快>慢:min(1, 2) > min([1, 2]) > np.min([1, 2])

Python雖然是非常方便的語法
但執行速度總比不上別人
必須使用很多技巧進行優化
我會慢慢和大家分享
更多精彩文章
如何落實AI?解析Toshiba的服務流程
[心得] 無瑕的程式碼:敏捷軟體開發技巧
[TensorFlow] 環境安裝(Anaconda與GPU加速)
今天要來比較一維資料
內建的 min() / max() / sum()
與Numpy的 np.min() / np.max() / np.sum()

究竟誰比較快呢?
格式有 List 和 Numpy Array

1、測試方式

我分別創造1、10、10^2、10^3、10^4...10^6個0
格式有List和Numpy Array
分別對他們執行內建的min和np.min
甚至也將型態轉換後再作比較
每一次的執行都是跑1000次
程式碼可看文末

2、結果

最小(min)和最大(max)


最小和最大的比較結果差不多
這邊就只放min的圖

假如你使用List,無論長度為何,一律使用內建min
假如你使用Array,長度50以下,使用內建min;以上則用np.min

總和(sum)


總和的部分

假如你使用List,無論長度為何,一律使用內建sum
假如你使用Array,長度10以下,使用內建sum;以上則用np.sum

補充

有一個特別的地方,當比較的數量在2個或3個單值時

min(A, B) 會快於 min([A, B])
另外,Numpy的運算是以C為底的方式執行
所以數量非常大時,才能維持高速運算
內建的函式就是單純的loop過去而已

3、程式碼

import time
import numpy as np

info = np.zeros([7, 6])

for idx in range(7):

    test_list = [0]*10**idx
    test_arr = np.asarray(test_list)
    
    start_time = time.time()
    for i in range(1000):
        max(test_list)
    info[idx][0] = time.time() - start_time
    
    start_time = time.time()
    for i in range(1000):
        np.max(test_list)
    info[idx][1] = time.time() - start_time
    
    start_time = time.time()
    for i in range(1000):
        np.max(np.asarray(test_list))
    info[idx][2] = time.time() - start_time
    
    start_time = time.time()
    for i in range(1000):
        np.max(test_arr)
    info[idx][3] = time.time() - start_time
    
    start_time = time.time()
    for i in range(1000):
        max(test_arr)
    info[idx][4] = time.time() - start_time

    start_time = time.time()
    for i in range(1000):
        max(list(test_arr))
    info[idx][5] = time.time() - start_time




← Back to note