web-dev-qa-db-ja.com

numpy.maxまたはmax?どちらが速いですか?

Pythonでは、どちらが速いですか?

numpy.max(), numpy.min()

または

max(), min()

リスト/配列の長さは2〜600です。実行時間を節約するためにどれを使用する必要がありますか?

32
Froyo

私のタイミングから、すでにnumpy配列aを持っている場合は、a.maxを使用する必要があります(np.maxが利用可能な場合、ソースはa.maxと同じです)。しかし、組み込みリストがある場合、ほとんどの時間はconverting np.ndarray =>になります。そのため、maxがタイミングに優れています。

本質的に:if np.ndarray then a.max、if listで、np.ndarrayのすべての機構が必要ない場合はmax

43
gorlum0

私もこれに興味があり、 perfplot (私の小さなプロジェクト)で3つのバリアントをテストしました。結果: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(25)],
    logx=True,
    logy=True,
    xlabel='len(a)'
    )
23
Nico Schlömer

おそらくPython timeit module のようなものを使用して自分でテストするのが最適です。必ずしもあなたを代表するものではないさまざまなテストデータと環境を持つサードパーティ。

10
srgerg

numpy.minおよびnumpy.maxは、組み込み関数に対してわずかに異なるセマンティクス(および呼び出しシグネチャ)を持っているため、選択は速度に関係するべきではありません。多次元データを正常に処理できるようにする必要がある場合は、numpyバージョンを使用してください。 Pythonリストまたはその他の次元を知らないものだけを使用している場合は、組み込み関数を使用してください。

2
lvc