ではありませんがvectorize
、ほとんどのnumpy関数は、必要out
なことを正確に実行する引数を取ります。
どの機能で使用しようとしてnumpy.vectorize
いますか? vectorize
計算を「ベクトル化」しようとしている場合、ほとんどの場合、これは間違った解決策です。
上記の例では、操作をインプレースで実行したい場合は、次の方法で実行できます。
a = numpy.zeros((1, 10))
a += 1
または、少し冗長になりたいが、例のように正確に実行する場合は、次のようにします。
a = numpy.zeros((1, 10))
buf = numpy.empty_like(a)
numpy.add(a, 1, out=buf)
numpy.vectorize
配列内のすべての要素に対してPython関数を呼び出す必要があります。したがって、配列全体で動作するnumpy関数と比較すると、追加のオーバーヘッドがあります。通常、高速化のために式を「ベクトル化」することを指す場合、使用するのではなく、基本的なnumpy関数のビルディングブロックから式を構築することを指しますvectorize
(これは確かに混乱します...)。
編集:あなたのコメントに基づいて、vectorize
本当にあなたのユースケースに合います!(「ラスター計算機」を作成することは、セキュリティ/サンドボックスの問題を超えて、それの非常に完璧なユースケースです。)
一方、numexpr
追加の依存関係を気にしない場合は、おそらくさらに適しています。
それはより速く、パラメータを取りout
ます。