Numpy通过其* =,/ =,+ =, - =等操作支持很多就地操作,但是没有这种形式的操作呢,比如x = f(x ),其中f只是一些T-> T函数,而T是x的单个元素的类型?例如:
x = np.sin(x)
分配不需要分配的存储空间。
答案 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中的内存或分配了临时存储,从而无法实现目的。文件对此并不清楚。事实上,文档根本没有提到这个功能,也没有给出任何使用它的例子。需要更多的研究。