入力配列をnumpyのufuncへのオプションの引数として提供するのが一般的に安全ですか?例えば、私は、次の動作することを確認した:入力配列をufuncの `out`引数として渡します
>>> import numpy as np
>>> arr = np.array([1.2, 3.4, 4.5])
>>> np.floor(arr, arr)
array([ 1., 3., 4.])
配列型は、(numpy.floor()
ためのフロートである)出力と互換性または同一のいずれかでなければならない、又はこれが起こる:
>>> arr2 = np.array([1, 3, 4], dtype = np.uint8)
>>> np.floor(arr2, arr2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: ufunc 'floor' output (typecode 'e') could not be coerced to provided output parameter (typecode 'B') according to the casting rule ''same_kind''
したがって、適切な型の配列を使用すると、ufuncをインプレースで適用するのは一般的に安全ですか?または、例外的なケースであるfloor()
ですか? EDIT
:として
をドキュメントには、それを明確にしないと、どちらも質問に接線方向のベアリングを持って、次の二つのスレッドを実行しません。最初の推測では、http://docs.scipy.org/doc/numpy/user/c-info.ufunc-tutorial.htmlのチュートリアルに基づいて、それがよくあるとは限りませんが、必ずしも安全ではないと思います。計算中に中間結果の一時的な保持者として出力配列を使用することには何の制限もないようです。 floor()
やciel()
のようなものは一時的な格納を必要としないかもしれませんが、より複雑な機能があるかもしれません。つまり、既存のライブラリ全体を念頭に置いて書くことができます。
これは技術的にufuncではありませんが、このようにして 'np.dot'の' out'パラメータを使用すると、2D配列で不正な結果が生じる可能性があります。 –
これは、私が探していた反例とほぼ同じですが、それほどではありません:) –
[ufunc docs](http://docs.scipy.org/doc/numpy/reference/ufuncs.html)の 'add(G、 C、G) 'を' G = G + C'の最適化として使用します。私はそれが安全だと言いたい。 (一方で、入力と出力が重複していても同じではない* ufuncsを呼び出すと問題が発生します) – user2357112