2012-06-08 70 views
25

在python中,哪一個更快?numpy.max或max?哪一個更快?

numpy.max(), numpy.min() 

max(), min() 

我的列表/數組的長度從2變化到600哪一個我應該使用以節省一些運行時間?

+3

你一定要測試並找出你的具體情況,但我的第一直覺是,這將取決於你的iterables是否「香草「python iterables或numpy iterables。 – jedwards

+6

如果數據在**列表**中,我會使用vanilla'max'。如果他們在**數組**中,我會使用'numpy.max'。將列表轉換爲numpy數組是一個相當昂貴的操作 –

回答

36
從我的計時

那麼它遵循如果你已經有了numpy的陣列a你應該使用a.max(來源告訴它一樣np.max如果a.max可用)。但是,如果你有內置列表,那麼大多數時間需要轉換爲np.ndarray =>這就是爲什麼max在你的計時中更好。

在essense:如果np.ndarray然後a.max,如果list和不需要的np.ndarray當時的標準max所有的機器。

9

如果你使用類似Python timeit module的東西來爲自己測試它可能是最好的。通過這種方式,您可以在自己的環境中測試自己的數據,而不是依賴具有不一定代表您的各種測試數據和環境的第三方。

+2

我試圖在600個浮點數的隨機列表上。 || np.max()+ np.min() - > 1.093毫秒|| max()+ min() - > 0.092 msec – Froyo

2

numpy.minnumpy.max與內建函數有稍微不同的語義(和調用簽名),所以選擇不應該與速度有關。如果您需要能夠理智地處理多維數據,請使用numpy版本。如果您只是使用Python列表或其他不瞭解維度的東西,請使用builtins。

9

我也對此感興趣,並用perfplot(我的一個小項目)測試了三個變體。結果:你不會錯用a.max()

enter image description here

代碼來重現劇情:

import numpy 
import perfplot 

perfplot.show(
    setup=lambda n: numpy.random.rand(n), 
    kernels=[ 
     max, 
     numpy.max, 
     lambda a: a.max() 
     ], 
    labels=['max(a)', 'numpy.max(a)', 'a.max()'], 
    n_range=[2**k for k in range(20)], 
    logx=True, 
    logy=True, 
    xlabel='len(a)' 
    )