Pythonでは、どちらが速いですか?
numpy.max(), numpy.min()
または
max(), min()
リスト/配列の長さは2〜600です。実行時間を節約するためにどれを使用する必要がありますか?
私のタイミングから、すでにnumpy配列a
を持っている場合は、a.max
を使用する必要があります(np.max
が利用可能な場合、ソースはa.max
と同じです)。しかし、組み込みリストがある場合、ほとんどの時間はconverting np.ndarray =>になります。そのため、max
がタイミングに優れています。
本質的に:if np.ndarray
then a.max
、if list
で、np.ndarray
のすべての機構が必要ない場合はmax
。
私もこれに興味があり、 perfplot (私の小さなプロジェクト)で3つのバリアントをテストしました。結果:a.max()
で問題はありません。
プロットを再現するコード:
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)'
)
おそらくPython timeit module のようなものを使用して自分でテストするのが最適です。必ずしもあなたを代表するものではないさまざまなテストデータと環境を持つサードパーティ。
numpy.min
およびnumpy.max
は、組み込み関数に対してわずかに異なるセマンティクス(および呼び出しシグネチャ)を持っているため、選択は速度に関係するべきではありません。多次元データを正常に処理できるようにする必要がある場合は、numpyバージョンを使用してください。 Pythonリストまたはその他の次元を知らないものだけを使用している場合は、組み込み関数を使用してください。