0

问题

在 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.]])

但是,有保障吗?查看了文档,例如它是如何工作的,但没有明确说明。请指教。

4

0 回答 0