numpy通用就地操作

时间:2015-03-02 23:33:21

标签: optimization numpy

Numpy通过其* =,/ =,+ =, - =等操作支持很多就地操作,但是没有这种形式的操作呢,比如x = f(x ),其中f只是一些T-> T函数,而T是x的单个元素的类型?例如:

x = np.sin(x)

分配不需要分配的存储空间。

1 个答案:

答案 0 :(得分:2)

事实证明,所有numpy ufuncs(大多数是T-> T函数)都可以选择在输入后指定函数调用中的操作输出,让你把结果放在任何你想要的地方,包括pre-you现有数组或返回原始数组!如果您的阵列很大,这可以节省大量的内存。

>>> tau = 6.2831853071795862
>>> x = sp.linspace(0, tau, 13)
>>> sp.sin(x, x)
array([  0.00000000e+00,   5.00000000e-01,   8.66025404e-01,
         1.00000000e+00,   8.66025404e-01,   5.00000000e-01,
         1.22464680e-16,  -5.00000000e-01,  -8.66025404e-01,
        -1.00000000e+00,  -8.66025404e-01,  -5.00000000e-01,
        -2.44929360e-16])
>>> x
array([  0.00000000e+00,   5.00000000e-01,   8.66025404e-01,
         1.00000000e+00,   8.66025404e-01,   5.00000000e-01,
         1.22464680e-16,  -5.00000000e-01,  -8.66025404e-01,
        -1.00000000e+00,  -8.66025404e-01,  -5.00000000e-01,
        -2.44929360e-16])
>>> 

多田!然而,还有待观察,如果numpy实际上重用了x中的内存或分配了临时存储,从而无法实现目的。文件对此并不清楚。事实上,文档根本没有提到这个功能,也没有给出任何使用它的例子。需要更多的研究。