質問
numexpr の式で出力配列を使用しても安全であることが保証されていますか?
バックグラウンド
out
式で配列 for を使っているのかなと思いますが、実行中に上書きされて、予期しない結果になる可能性があります。簡単なテストではout
、式内で配列を使用して、上書きされる一時バッファとして使用されるかどうかを確認しました。
ne.evaluate("out * out / log(out) +out", out=out)
out
実行中、配列内の値はそのままであるように見えます。したがって、out
すべての実行が完了するまで、配列内の値は変更されないと思います。
import numpy as np
import numexpr as ne
out = np.random.uniform(size=(3,2))
bak = np.copy(out)
ne.evaluate("out * out / log(out) +out", out=out)
Y = bak * bak / np.log(bak) + bak
out-Y
array([[0., 0.],
[0., 0.],
[0., 0.]])
しかし、それは保証されていますか?たとえばHow it worksなどのドキュメントを見ましたが、明確に述べられていません。お知らせ下さい。