問題タブ [numexpr]
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 - Windows 7 に numexpr (したがって pytables) をインストールできません。
.whl を使用して numexpr と pytable をインストールしました。インストールは問題ないように見えましたが、dll のインポートに失敗し続けます。取り付け詳細はこちら。
--- pytable で numexpr を使用する場合 ---
python - numexpr と sqrt を使用した sympy lambdify
lambdify
を使用して生成された数値コードを高速化しようとしていますnumexpr
。残念ながら、ベースの関数は、サポートされている関数の 1 つであるにもかかわらず、関数numexpr
を使用すると壊れます。sqrt
これは私の問題を再現します:
これを実行すると、出力は次のようになります。
サニティチェックとして、numexpr
直接電話してみました:
これは期待どおりに機能し、 と同じ結果になりfunc_numpy
ます。
編集:次の行を使用すると機能します:
これは sympy バグですか?
python - 列名が数値または特殊文字を含む場合の query() の使用
列に名前がない、または名前に特殊文字が含まれているパンダでクエリメソッドを使用することは可能ですか? 構成ファイルのクエリ文字列を使用したいのですが、一部の列では機能しません。有効な Python 識別子の制限については承知しています が、index のような他に見たことのない特別なキーワードがあるのではないかと考えています。
python - Python での数学関数の最適化と高速化
この数学関数の目的は、二面角を使用して 2 つ (またはそれ以上) のタンパク質構造間の距離を計算することです。
たとえば、構造生物学で非常に役立ちます。そして、私はすでに numpy を使用して Python でこの関数をコーディングしていますが、目標は実装を高速化することです。計算時間の基準として、scikit-learn パッケージで利用可能なユークリッド距離関数を使用します。
ここに私が今持っているコード:
9.44 ms 非常に高速ですが、100 万回実行する必要がある場合は非常に遅くなります。さて、問題は、それをどのように行うかです。次のステップは何ですか?シトン?PyOpenCL? 私は PyOpenCL の経験がありますが、これほど精巧なものをコーディングしたことはありません。numpy で行っているように、GPU で二面体距離を 1 ステップで計算できるかどうか、およびどのように処理するかはわかりません。
助けてくれてありがとう!
編集:ありがとうございます!現在、完全なソリューションに取り組んでおり、完成したらコードをここに配置します。
CYTHON バージョン:
したがって、リンクをたどって、二面体距離関数の cython バージョンを作成します。速度はそれほど速くはありませんが、numexpr バージョンよりはまだ遅いです (17ms 対 9.44ms)。そのため、prange を使用して関数を並列化しようとしましたが、さらに悪化しました (37.1ms 対 17ms 対 9.4ms)!
私は何かが恋しいですか?
python - Python - memmap と CPU で作業しながら行列の乗算と削減を高速に行う方法
こんにちは、高速な行列の乗算、加算、function_overwrite、および軸の削減による合計を実行し、RAM なしで CPU を介して numpy.memmaps で作業するのに問題があります (私は思います)。numexpr を使用する場合にのみ、ドットから配列を作成することを避けることができます。
RAMなしでCPUを使用してnumexprよりも高速に実行することは可能ですか? Cython + FORTRAN の lapack や blass はどうですか? ヒントやコツは大歓迎です!助けてくれてありがとう!
編集された情報: ちなみに、Intel Core2Duo t9300 CPU、2.7 GB RAM(BIOSの問題により4GBからのみ表示されます)、SSD 250GB、古いIntel GPUを搭載したラップトップで作業しています。いくつかのアドオンを含む Firefox で主に使用される RAM のレベルが低いため、コーディング用のスペースがあまり残っていないため、xD の使用を避けています。
そして、私はプログラミングの上級レベル (ステップ 1/1000) にいるように感じますが、今のところコードがハードウェア上でどのように機能するかはわかりません - 私はそれを推測しているだけです (したがって、私の考えのいくつかの間違いは xD に見えるかもしれません)。
編集: numexpr と cython prange for-loop を使用して正弦波を計算するコードを cython で作成しました。
脈動データ (om、eps、Spectra、Amplitude) は OM numpy.memmap に保存され、時間データ (t、z) は TI numpy.memmap に保存されます。OM は (4,1,2500) のような形で、TI は (2,1,5e+5,1) のような形です。その形で必要なだけです。
Cython を使い始めたばかりなので、最適化されていない可能性があります。今のところ、prange を使用したコードは numexpr と同じ時間がかかっています (この部分を含むすべてのコードの RAM 使用量は 100 MB、CPU は 50%、SSD は低 - 計算時間は 1-2 分です)。私はmemoryviewsを試しましたが、それはいくつかのローカルコピーを作成し、時間の経過とともにRAMを使用しました。メモリビューの操作方法を理解するには、上級レベルのステップ 3/1000 である必要があります。
python - pandas DataFrame で正規化/Z スコアの計算を実行するときの「「op_axes」が NULL の場合に「oa_ndim == 0」を使用する DeprecationWarning」
pandas DataFrame のデータを正規化するために、次の関数を作成しました。
しかし、それぞれを呼び出すと、次の警告が表示されます。
これが何を言っているのか理解できません!結果に影響する可能性はありますか?すべての float 値で構成されるデータセットX
whereX.shape == (102819, 301)
およびでこれらの関数を呼び出しています。type(X) == <class 'pandas.core.frame.DataFrame'>
python - 多数の入力値の数式 (関数) を高速に評価する
以下の質問
そして、それぞれの回答により、(多かれ少なかれ信頼されている)ユーザーから与えられた単一の数式(この回答https://stackoverflow.com/a/594294/1672565の行に沿った一般的な用語)を効率的に解析する方法を考えさせられましたデータベースからの 20k から 30k の入力値の場合。さまざまなソリューションを比較できるように、簡単で汚いベンチマークを実装しました。
# 解決策 #1: eval [はい、完全に安全ではありません]
# 解決策 #2a: sympy - evalf ( http://www.sympy.org )
# 解決策 #2b: sympy - lambdify ( http://www.sympy.org )
# 解決策 #2c: sympy - numexpr [および numpy] を使用した lambdify ( http://www.sympy.org )
# 解決策 #3a: [ast に基づく] asteval - 文字列マジックを使用 ( http://newville.github.io/asteval/index.html )
# 解決策 #3b (M Newville): asteval [ast に基づく] - 解析して実行 ( http://newville.github.io/asteval/index.html )
# 解決策 #3c (M Newville): asteval [ast に基づく] - 解析して numpy で実行 ( http://newville.github.io/asteval/index.html )
# 解決策 #4: simpleeval [ast に基づく] ( https://github.com/danthedeckie/simpleeval )
# 解決策 #5 numexpr [および numpy] ( https://github.com/pydata/numexpr )
私の古いテスト マシン (Python 3.4、Linux 3.11 x86_64、2 コア、1.8GHz) では、次の結果が得られます。
際立っているのはevalの信じられないほどの速度ですが、これを実際に使用したくはありません。2 番目に最適な解決策は、 numpyに依存するnumexprのようです。これは避けたい依存関係ですが、これは難しい要件ではありません。次善の策は、 astを中心に構築されたsimpleevalです。別のastベースのソリューションであるaevalは、最初にすべてのfloat入力値を文字列に変換する必要があるという事実に苦しんでおり、その周りで方法を見つけることができませんでした。sympyは、最も柔軟で明らかに最も安全なソリューションを提供するため、最初は私のお気に入りでしたが、最後から 2 番目のソリューションまでの印象的な距離で最後になりました。
更新 1 : sympyを使用したはるかに高速なアプローチがあります。解決策 2b を参照してください。sympyが実際に内部で使用しているかどうかはわかりませんが、numexprとほぼ同じです。
更新 2 : sympyの実装は、simplify の代わりに sympify を使用するようになりました (主任開発者 asmeurer の推奨による - 感謝)。明示的に要求されない限り、 numexprを使用していません (解決策 2c を参照)。また、 astevalに基づく 2 つの大幅に高速なソリューションを追加しました (M Newville に感謝)。
比較的安全なソリューションをさらに高速化するには、どのようなオプションが必要ですか? たとえば、 ast を直接使用する他の安全な(-ish)アプローチはありますか?