###Numpy2次元配列からN個の最小値のインデックスを各列ごとに取得する最も効率的な方法
質問させていただきます。
matrix2d = np.random.rand(60000, 2000)
という規模の2次元配列を用意し、その各列ごとにソートした場合のN個の最小値のインデックスを得たいと考えています。
Numpyを使って書くと、次のようなコードになるかと思います。
min_N = np.argpartition(matrix2d, N, axis=0)[:N, :]
しかし、私の計算環境(Corei7 6700)ではこの処理に5秒ほどかかってしまいます。
Numpyのドキュメントで<partitioning along the last axis is faster>とあったので、以下のように変更もしました。
min_N = np.argpartition(matrix2d.transpose(), N, axis=1).transpose()[:N, :]
上記のコードで約4秒ほどの計算時間となり、1秒短縮されました。
しかし、この計算は繰り返し行うものであるため、更なる高速化の手段はないでしょうか。
bottoleneck等も試しましたが、遅くなるだけでした。
環境を簡単にですが。
Python2.7, Windows10, Corei7 6700, Mem32GB
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/04 13:35