numpy.argminとnumpy.aminの両方の結果をnumpyを一度に呼び出して取得できますか?ありがとう。効率的にnumpy.argminとnumpy.aminを同時に取得する
1
A
答えて
4
np.argmin
を使用すると、最小値に対応するインデックスを取得し、NumPy's advanced indexing
のインデックスを使用して最小値を取得できます。
2D
アレイを使用して、使用方法を紹介しましょう。 A
を2D
配列とし、axis=1
に沿って最小のインデックスと値を探したいとします。
したがって、我々は行うことができます -
min_idx = np.argmin(A,axis=1)
min_val = A[np.arange(A.shape[0]),min_idx]
のは、サンプル実行のための実際の2D
配列を取り、結果を検証してみましょう -
In [16]: A
Out[16]:
array([[79, 97, 12, 54, 59],
[44, 45, 42, 78, 32],
[32, 41, 67, 60, 4],
[24, 4, 85, 94, 65]])
In [17]: min_idx = np.argmin(A,axis=1)
In [18]: A[np.arange(A.shape[0]),min_idx] # Using min_idx & indexing
Out[18]: array([12, 32, 4, 4])
In [19]: np.amin(A,axis=1) # Using np.amin to verify
Out[19]: array([12, 32, 4, 4])
ランタイムテストを -
In [26]: def original_app(A):
...: min_idx = np.argmin(A,axis=1)
...: min_val = np.amin(A,axis=1)
...: return min_idx, min_val
...:
...: def proposed_app(A):
...: min_idx = np.argmin(A,axis=1)
...: min_val = A[np.arange(A.shape[0]),min_idx]
...: return min_idx, min_val
...:
In [27]: A = np.random.randint(0,99,(4000,5000))
In [28]: %timeit original_app(A)
10 loops, best of 3: 70.9 ms per loop
In [29]: %timeit proposed_app(A)
10 loops, best of 3: 33.1 ms per loop
を
タイミングもう少しCT -
In [31]: min_idx = np.argmin(A,axis=1)
In [32]: %timeit np.argmin(A,axis=1) # Used in both methods
10 loops, best of 3: 34.5 ms per loop
In [33]: %timeit np.amin(A,axis=1) # Original approach
10 loops, best of 3: 37.3 ms per loop
In [34]: %timeit A[np.arange(A.shape[0]),min_idx] # Proposed approach
10000 loops, best of 3: 56 µs per loop
我々はそれに費やさ無視できるランタイムとの最後の段階で高度なインデックスを持つ大きなゲインを見ることができるように。これによりほぼ100%のランタイムシェービングが可能になりました!
関連する問題
- 1. 関係のID配列を効率的に取得する
- 2. BigQueryテーブルのパーティションを効率的に取得する方法
- 3. タイムラインポストの総数を効率的に取得する方法
- 4. 大容量ファイルシステムのファイルリストを効率的に取得する
- 5. C#System.Drawing.Bitmapから効率的にピクセルデータを取得する
- 6. MediaStoreのオーディオファイルのジャンルを効率的に取得する
- 7. AndroidデータベースとWebデータベースを効率的に同期する方法
- 8. スケールアセットビットマップの効率的な取得
- 9. 一時的なユーザーデータを効率的に保存する方法
- 10. グラフAPIからのシェア数を効率的に取得
- 11. Selectステートメントから効率的に行数を取得
- 12. SQL:効率的に最後のレコードを取得
- 13. アナログ時計の分針と時針を効率的に更新する方法
- 14. QGraphicsView:効率的にQGraphicsItemsのビューポートの座標を取得するには?
- 15. user_nameを取得する効率的な方法
- 16. タイムスタンプでデータを取得する最も効率的な方法
- 17. 効率をテストするための良いボーナスクイズを探す(具体的には時間に関する効率)
- 18. 同じリモートマシンのUNCパスを効率的にコピーする方法
- 19. 同じFileSystem内のファイルを効率的にコピーする方法
- 20. が効率的に
- 21. プロセスの実行時間を効率的に測定する
- 22. Redshiftの時間を効率的に比較する
- 23. データと時間のある独自のデジタル時計。効率的
- 24. セットのすべてのペアを効率的に取得する方法は?
- 25. ElasticSearchのすべての_idを効率的に取得する方法
- 26. astropyを使ってPythonの中点を効率的に取得する
- 27. 時間(時間)に基づいてデータを効率的に分割する
- 28. 意見:Wordpressで効率的に分類名 'ラベルを取得する
- 29. Spring/Java/Oracleで更新された行を効率的に取得する
- 30. 最も効率的な方法でレイジーリストのカウントを取得するには?
別々の行で呼び出しても、コンマで区切っても問題ありませんか? – EdChum
。私はargminとaminの両方を行うことができる配列の単一のチェックがあると思っていた。配列をargminのために1回チェックしてからもう一度aminをチェックすると時間が浪費されるようです。それとも、これは実際には遅いですか? – rxu