問題タブ [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 - numexpr の部分式のキャッピング
を使用して次のことを効率的に表現するにはどうすればよいnumexpr
ですか?
x
とy
は、同じ形状のいくつかの大きな NumPy 配列です。
つまり、で割る前ににキャップしようとしx-y
ています。1.0
x+y
私は単一のnumexpr
式を使用してこれを行いたいと思います(x
そしてy
巨大であり、それらを複数回反復する必要はありません)。
python - numexprでの自動float32プロモーション
次のdtypeのNumPy配列について考えてみますfloat32
。
2
を使用して乗算するとpytables.Expr
、float32
配列が返されます。
しかし、これにを掛けると2.0
、float64
配列が返されます。
結果がプロモートされないように、上記の式で浮動小数点リテラルを指定する方法はありますfloat64
か?
より一般的には、float32
配列を使用する式があり、結果も型であることを確認したいと思いますfloat32
(float64
中間計算に使用してもかまいませんが、結果をとして保存する余裕はありませんfloat64
)。どうすればよいですか?
python - Numpy ベクトル操作の並列化
たとえば、numpy.sin()
次のコードは、配列の各値の正弦の値を返しますa
。
しかし、私のマシンには 32 コアがあるので、それらを活用したいと考えています。(オーバーヘッドは価値がないかもしれませんnumpy.sin()
が、実際に使用したい関数はかなり複雑で、膨大な量のデータを扱うことになります。)
これは最善の方法ですか(読み取り:最もスマートまたは最速):
またはこれを行うためのより良い方法はありますか?
java - PyTablesとnumexprのScalaまたはJavaアナログ
numexprとPyTables(特にtables.Expr)のScalaまたはJavaの類似物を探しています。これは、メモリ不足のデータに対してマトリックス操作を実行する必要があるマルチコアマシン上のマルチコア分析システム用です。特に、ライブラリは、ディスク、RAM、キャッシュ、CPU間のデータの移動を最適化する必要があります。スパース行列は効率的に処理する必要があります。ライブラリが対処する必要のある問題の種類の詳細については、http://www.youtube.com/watch ?v=J3-oN_TulTg およびhttps://www.google.com/search?q=altedのトップヒットを参照してください。 + cpu+starvation。
この質問は表面的にはpyTablesと同等のScalaと同じですか? その質問は、pytablesのどの側面が重要であるかを指定しておらず、そこにある答えは私の問題には適切ではありません。
キャッシュ認識およびキャッシュ忘却アルゴリズムを処理するOTOHライブラリは、ある程度役立つ可能性があります。
「ScalaVirtualized」(別名言語仮想化)とStanford-PPL Deliteフレームワークは、私が探しているものがまだ存在しない場合、Scalaで必要なものを構築するための良い基盤になると思います。
Hadoop、MapReduce、グラフデータベース、および人気のあるnosqlストアのほとんどは、私が探しているものではありません。私が探しているのは技術的には一種のnosqlストアですが。
python - Numexprエラー: "a = global_dict [name]"
Numexprを使用して、 Numpyと比較するための高速なVectorNorm関数を作成しようとしています。私は次のことを試みます:
そして私はこれを手に入れます:
私は基本的に彼らのユーザーガイド(周りの唯一のリファレンスのようです)で同じ手順に従いました。私が持っている唯一の手がかりはこれです:
umexprの主要なルーチンは次のとおりです。
evaluate(ex, local_dict=None, global_dict=None, **kwargs)
ここで、exは、「2 * a + 3*b」のような式を形成する文字列です。aとbの値は、デフォルトで、呼び出し元の関数のフレームから取得されます(sys._getframe()を使用)。または、local_dictまたはglobal_dict引数を使用して指定するか、キーワード引数として渡すことができます
...私は本当に理解していません-パッケージが単純なので、作者はそれを単純に保ったと思います。私は何を見落としましたか?
python - Pythonによる分散メモリクラスターでの「グローバル配列」並列プログラミング
numpy の機能を分散メモリ クラスターでの操作に拡張する Python ライブラリを探しています。つまり、「プログラマーが配列を、異なるプロセッサに配置された複数の独立した配列ではなく、単一のグローバル配列と見なす並列プログラミング モデルです。 "
Matlab については、MIT の Lincoln Lab がpMatlabを作成しました。これにより、並列プログラミングの側面の詳細についてあまり心配することなく、クラスターで行列代数を実行できます。(上記引用元)
ディスクベースのストレージの場合、python 用の pyTables が存在します。クラスタ内での計算の分散方法を最適化するのではなく、ディスク上の大きなデータに関して計算を「分散」する方法を最適化します。- これはかなり似ていますが、まだ重要な側面が欠けています。
目的は、クラスターからパフォーマンスの最後のビットを絞り出すことではなく、単一のマシンには大きすぎる科学的計算を (半対話的に) 行うことです。
Pythonにも同様のものが存在しますか? 私のウィッシュリストは次のとおりです。
- 積極的に維持
- numpyの代わりにドロップイン
- あるいは、 numexprと同様の使用法
- 並列プログラミング部分の高度な抽象化: つまり、ユーザーが明示的に MPI を使用する必要はありません。
- 分散メモリ クラスタでのデータ局所性のサポート
- クラスタ内のマルチコア マシンのサポート
これはおそらく、歯の妖精を信じることに少し似ていますが、誰にもわかりません...
私はこれまでに見つけました:
パシフィック ノースウェスト国立研究所による Global Array 用の Python インターフェイスがあります (存在する/存在していました)。トピック「NumPy と Global Arrays Toolkit を使用した Python での高性能並列計算」の下のリンクを参照してください。(特に「GA_SciPy2011_Tutorial.pdf」。)しかし、これもまた消えてしまったようです。
DistNumPy :このペーパーで詳しく説明します。しかし、プロジェクトは放棄されたようです。
パッケージを知っているか、上記の 2 つのいずれかを使用したことがある場合は、その使用経験について説明してください。
python - Numexpr: "local_dict" と "global_dict" の使い方は?
私はNumexprパッケージを実験し、学ぼうとしています。それを使用する方法の例はせいぜいまばらです。「local_dict」および「global_dict」引数の使用方法について簡単な例を教えてください。
python - numpy a la numexpr でインプレース極座標変換を行う方法
Numexpr は、numpy 配列を操作するためにいくつかの式をジッティングできるようにする Python モジュールです。さて、それが私にできることならクールだろう:
の計算値を再利用して、と のcita
両方を計算nx
できますny
。また、x と y を 1 回取得する必要があり、それらはメモリ内で次々に取得されるため、キャッシュ ミスも少なくなります。nx
との書き方も同様ny
です。しかし、私が理解している限り、現状では、この種のコードは Numexpr では不可能です。
だから、私の質問:
これを行うことができるpython + numpyのより高度なものはありますか? (numexpr の一部のスーパーセット)
または、私は間違っていますか?これは numpy と numexpr で簡単に実行できますか?
注 1: この小さな関数を C/C++ などでかなりの数の方法で実装できること、またはパフォーマンスをあまり気にせず、numexpr の有無にかかわらず numpy を含むハックを実行できることを知っています。
注2: weaveについては知っていますが、「Cをいじることを伴う、クールでメンテナンスされていないソリューション」の袋に入れました。
python - numexpr.evaluate( "a + b"、out = a)
一時的な配列の作成を回避するために、操作しているのと同じ配列に値を割り当てることはpython numexprで安全ですか?
プロジェクトのホームページのメモリ使用量の説明からは問題ないように見えますが、ソースコードを詳しく調べなければ、それは確かな答えではありません。
私はうまくいく以下を試しましたが、このパッケージに精通している誰かからの確認を期待しています: