减少运算过程中的内存开销

运算的内存开销

在前面的例子中,我们为每个操作新开内存来存储它的结果。举个例子,假设x和y都是NDArray,在执行y = x + y操作后, y所对应的内存地址将变成为存储x + y计算结果而新开内存的地址。为了展示这一点,我们可以使用Python自带的id函数:如果两个实例的ID一致,它们所对应的内存地址相同;反之则不同。

In [20]:

x=nd.ones((3,4))y=nd.ones((3,4))before=id(y)y=y+xid(y)==before

Out[20]:

False

在下面的例子中,我们先通过nd.zeros_like(y)创建和y形状相同且元素为0的NDArray,记为z。接下来,我们把x + y的结果通过[:]写进z所对应的内存中。

In [21]:

z=nd.zeros_like(y)before=id(z)z[:]=x+yid(z)==before

Out[21]:

True

然而,这里我们还是为x + y创建了临时内存来存储计算结果,再复制到z所对应的内存。为了避免这个内存开销,我们可以使用运算符的全名函数中的out参数。

In [22]:

nd.elemwise_add(x,y,out=z)id(z)==before

Out[22]:

True

如果现有的NDArray的值在之后的程序中不会复用,我们也可以用 x[:] = x + y 或者 x += y来减少运算的内存开销。

In [23]:

before=id(x)x+=yid(x)==before

Out[23]:

True

你可能感兴趣的:(减少运算过程中的内存开销)