我正在寻找最节省内存的方法来计算复杂 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
但如果我没记错的话,这意味着我必须分配内存both实部和虚部计算,因此峰值内存使用量将为 2.0 * 原始数组大小。这arr.real
属性还返回一个不连续的数组(但这不太重要)。
我有什么遗漏的吗?有没有更好的方法来做到这一点?
EDIT 1:
很抱歉没有说清楚,我不想覆盖 arr,所以我不能将其用作 out。