在python numexpr中为你操作的同一个数组赋值是否安全,以避免创建临时数组?
从project homepage上的内存使用描述看起来没问题,但是如果不深入了解源代码,这几乎不是一个可靠的答案。
我尝试了以下哪个工作正常,但我希望得到更熟悉此软件包的人的确认:
import numpy as np
import numexpr as ne
a = np.ones(5)
b = a.copy()
ne.evaluate("a+b",out=a)
array([ 2., 2., 2., 2., 2.])
答案 0 :(得分:7)
它有效,因为numexpr仍在内部使用临时数组,虽然块大小为1024个元素(如果使用VML则为4096)。您可以将输入的这些块视为切片,尽管它们在评估期间存储为适当的C数据类型,以提高速度和内存的紧凑性。在执行每个块的计算之后,结果将存储到out参数中,否则它必须分配与输入相同大小的数组。
查看Why It Works部分有关numexpr如何评估向量化算术的伪代码。