問題タブ [numba]
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.
python - すべてのプロセッサを最大化する Numba ベクトル化
@vectorize がマシンで利用可能なすべてのプロセッサを使用しないように anaconda を構成する方法があるかどうかは誰にもわかりませんか? たとえば、8 コアのマシンを使用している場合、@vectorize で 4 つのコアのみを使用する必要があります。
python - データフレームを対応する名前の配列またはシリーズに分割します(その後、再結合します)
列 x と y を持つデータフレームがあるとします。列と同じ名前の配列 (またはシリーズ) に自動的に分割し、データを処理してから、後で再結合したいと考えています。これを手動で行うのは非常に簡単です。
しかし、私はこれを自動化したい。df.columns を使用して文字列のリストを取得するのは簡単ですが、['x','y'] ではなく [x,y] が本当に必要です。これまでにできる最善のことは、exec でそれを回避することです。
したがって、2 つの問題があります。
1) exec をこのように使用することは、一般的には良い考えではありません (これを numba と組み合わせようとしたときに、すでに問題が発生しています) -- それとも悪いことですか? シリーズと配列ではうまくいくようです。
2) ここでビューを利用する最善の方法がわかりません。ここで本当にやりたいことは、df.x のビューとして x を使用することだけです。xが配列の場合は不可能だと思いますが、xがシリーズの場合は可能でしょうか?
上記の例は配列用ですが、理想的にはシリーズにも適用されるソリューションを探しています。その代わりに、どちらか一方と連携するソリューションはもちろん大歓迎です。
動機:
1) eval で部分的に達成できる可読性ですが、eval を複数行で使用できるとは思いませんか?
2) z=x+y のような複数の行を使用すると、この方法はシリーズ (私が試した例では 2x または 3x) では少し速くなり、配列 (10x 以上) ではさらに速くなります。ここを参照してください: 2次元配列を数値的に処理する最速の方法: データフレーム vs シリーズ vs 配列 vs numba
python - Numpy スカラーのバイナリ演算は float64 に自動的にアップキャストされます
np.float32 と組み込みの Python int および float の間でバイナリ演算 (加算や乗算など) を実行し、戻り値の型として np.float32 を取得したいと考えています。ただし、np.float64 に自動的にアップキャストされます。
コード例:
np.float128 でこれを行うと、b も np.float128 になります。これにより、精度が維持されるため、これは良いことです。ただし、私の例では精度を維持するために np.float64 へのアップキャストは必要ありませんが、それでも発生します。2 ではなく 2.0 (Python float (64 ビット)) を a に追加した場合、キャストは理にかなっています。しかし、ここでも、私はそれを望んでいません。
私の質問は次のとおりです。二項演算子を np.float32 と組み込みの Python int/float に適用するときに行われるキャストを変更するにはどうすればよいですか? または、すべての計算で倍精度ではなく単精度を標準にすることも、解決策としてカウントされます。倍精度は必要ないからです。他の人がこれを求めており、解決策が見つかっていないようです。
私はnumpy配列とdtypesについて知っています。ここで、配列は常にその dtype を保持するため、必要な動作が得られます。ただし、配列の単一の要素に対して操作を行うと、望ましくない動作が発生します。np.ndarray (または np.float32) のサブクラス化と __array_priority__ の値の変更を含む、漠然とした解決策があります。これまでのところ、私はそれを機能させることができませんでした。
なぜ私は気にするのですか?Numba を使用して n-body コードを記述しようとしています。これが、配列全体に対して単純に操作を行うことができない理由です。すべての np.float64 を np.float32 に変更すると、速度が約 2 倍になります。これは重要です。np.float64 キャスト動作は、この高速化を完全に台無しにするのに役立ちます。これは、np.float32 配列に対するすべての操作が 64 精度で行われ、その後 32 精度にダウンキャストされるためです。
python - numba が機能していないようです
numbaをテストするために書いたコードを次に示します
@autojit をコメントアウトしたときの結果
@autojit を使用した場合の結果
ここで何がうまくいかないのですか?
python - Numba は、頻度カウントにおいて純粋な Python よりも遅い
離散エントリが 2D numpy 配列として表されるデータ マトリックスが与えられた場合、いくつかのインスタンス (マトリックスの行) のみを見て、いくつかの特徴 (列) の観測頻度を計算しようとしています。
bincount
ファンシーなスライスを行った後、各スライスにnumpy を適用することで、これを非常に簡単に行うことができます。外部データ構造をカウント アキュムレータとして使用して、純粋な Python でこれを行うことは、C スタイルの二重ループです。
上記のコードを実行しているときに得られる時間は次のとおりです。
ここでの私のポイントは、numba で jit を適用しようとすると、実装がさらに遅くなることです。
android - Jetson TK1 で Numbapro を使用する
これについてインターネット全体を検索しましたが、信頼できる答えが見つかりませんでした。私は GPU プログラミングの初心者ですが、シミュレーションと Python が大好きなので、Jetson TK1 ユニットを注文しました。PC で Numpy を試しましたが、これらのシミュレーションを Android に持ち込みたいです。PyCuda と Numba について読んだことがありますが、完全に Python で書かれているため、C でカーネルを記述する必要がないため、後者を好みます。 ) Tegra K1 SOC のマルチコア ARM CPU にコードを向けることができ、CUDA 6 で利用可能なユニファイド メモリをどのように使用できるようになりますか。注意してください、Numba はまだ ARM LLVM をサポートしていません。または、CPU コア/スレッドにアクセスできるように、必須の C++ および CUDA C++ クラスを開始する必要がありますか。