2017-01-21 10 views
0

numpy配列行列の各行の最大値を取得しようとしています。私はそれを効率的に達成したいと思いますし、これを行うために次の2つのイディオムを思いつきました。私の質問は、次の2つの方法の間にパフォーマンスの違いはありますか?numpy配列のnp.max(x、axis = 1)とx.max(axis = 1)の違い

x = np.array([[1,2,3],[4,5,6],[7,8,9]]) 
#array([[1, 2, 3], 
#  [4, 5, 6], 
#  [7, 8, 9]]) 

np.max(x,axis = 1) 
#array([3, 6, 9]) 

x.max(axis = 1) 
#array([3, 6, 9]) 

答えて

1

私はノートにそれをテストし、あなたの第2の方法は若干速いようです:

import numpy as np 
x = np.array([[1,2,3],[4,5,6],[7,8,9]]) 

最初の方法:

%%timeit 
np.max(x,axis = 1) 

The slowest run took 11.75 times longer than the fastest. This could mean that an intermediate result is being cached. 
100000 loops, best of 3: 4.71 µs per loop 

第二の方法:

%%timeit 
x.max(axis = 1) 

The slowest run took 12.81 times longer than the fastest. This could mean that an intermediate result is being cached. 
100000 loops, best of 3: 3.71 µs per loop 

おそらく、これは、最初のモジュールではnumpyモジュールを呼び出すのに対し、2番目のモジュールではすでにモジュールに入っています。

しかし、私はこのような小さなものを最適化しようとするのはお勧めしません。まず残ったことがあるかどうかを確認してください(Numbaのようなコンパイラを使用しましたか?あなたなど)

関連する問題