问题
在 numexpr 的表达式中使用输出数组是否保证安全?
背景
我想知道表达式中是否使用了数组for out
,它可能会在执行过程中被覆盖,这可能会导致意外结果。在一个简单的测试中,使用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.]])
但是,有保障吗?查看了文档,例如它是如何工作的,但没有明确说明。请指教。