問題タブ [numpy-einsum]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
343 参照

python - カーネル関数の計算で numpy einsum と numexpr を使用してパフォーマンスを高速化するにはどうすればよいですか?

RBF、双曲線正接、フーリエなどのいくつかの有名なカーネルをライブラリのsvm.SVRメソッドに定義しようとしています。sklearn私は作業を開始しrbf(svm に rbf 用のデフォルトのカーネルがあることは知っていますが、後でカスタマイズできるように定義する必要があります)、ここでいくつかの有用なリンクを見つけて、これを選択しました:

これを使用したのは、形状が異なる電車 ([3850,4] の形状) とテスト データ ([1200,4] の形状) に使用できるためです。しかし問題は、処理が遅すぎて、結果が出るまで長い間待たなければならないことです。cython で static-typing と memoryviews も使用しましたが、そのパフォーマンスはデフォルトのsvmrbf カーネルほど良くありません。私はまた、同じ問題についてのこのリンクを見つけましたがnumpy.einsumnumexpr.evaluate私にとっては少し混乱しています。これは、速度パフォーマンスの点で最高のコードであることがわかりました。

scipy.linalg.blas からインポート sgemm

このコードは 1 つの入力 (X) に対してのみ機能し、私の場合に合わせて変更する方法が見つかりませんでした (2 つの異なるサイズの 2 つの入力 - カーネル関数は形状 (m,n) および (l,n) の行列を取得します)。svm docsに従って (m,l) を出力します)。K[i,j] = np.exp(-1*np.linalg.norm(x-y)**2)高速化するには、最初のコードを2番目のコードに置き換えるだけでよいと思います。どんな助けでもいただければ幸いです。