1
numpy支持很多就地操作,包括* =,/ =,+ =, - =等操作,但是如果操作沒有這種形式,像x = f(x),其中f僅僅是一些T-> T函數,而T是x的單個元素的類型?例如:numpy通用就地操作
x = np.sin(x)
分配存儲它不需要分配。
numpy支持很多就地操作,包括* =,/ =,+ =, - =等操作,但是如果操作沒有這種形式,像x = f(x),其中f僅僅是一些T-> T函數,而T是x的單個元素的類型?例如:numpy通用就地操作
x = np.sin(x)
分配存儲它不需要分配。
事實證明,所有numpy ufuncs(大多數T> T函數)都可以在輸入後指定函數調用中的操作輸出,讓您將結果放到任意位置,現有的數組或返回到原始數組中!如果你的陣列很大,這可以節省大量的內存。
>>> 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中的內存或者分配了臨時存儲空間,這仍然有待觀察,從而破壞了目的。這個文件不清楚。實際上,文檔幾乎沒有提到這個功能,並沒有給出它的用法的任何例子。需要更多的研究。
它確實就地,可能有一個小型的中間緩衝區。時間兩種方法,你應該看到性能上的好處(我的系統上1000項數組的'np.sin'快30%)。 – Jaime 2015-03-03 00:40:06
令人印象深刻!雖然我想,如果內存節省可以讓你將整個操作堵塞到L1緩存中,那麼我實際上並不會期待性能提升的很多 - 只有內存性能提升。 – enigmaticPhysicist 2015-03-03 01:18:48