我正在寻找最节省内存的方法来计算复杂的 numpy ndarray 的绝对平方值
arr = np.empty((250000, 150), dtype='complex128') # common size
我还没有找到一个完全可以做到的 ufunc np.abs()**2
。
由于这种大小和类型的数组占用大约半 GB,我正在寻找一种主要节省内存的方法。
我也希望它是可移植的,所以理想情况下是一些 ufunc 的组合。
到目前为止,我的理解是这应该是最好的
result = np.abs(arr)
result **= 2
它将不必要地计算(**0.5)**2
,但应该**2
就地计算。总共峰值内存需求只是原始数组大小 + 结果数组大小,应该是 1.5 * 原始数组大小,因为结果是真实的。
如果我想摆脱无用的**2
电话,我必须做这样的事情
result = arr.real**2
result += arr.imag**2
但如果我没记错的话,这意味着我必须为实部和虚部计算分配内存,因此峰值内存使用量将是 2.0 * 原始数组大小。这些arr.real
属性还返回一个不连续的数组(但这不太重要)。
有什么我想念的吗?有没有更好的方法来做到这一点?
编辑1:很抱歉没有说清楚,我不想覆盖arr,所以我不能用它。