应用np.sum(np.abs(X))和np.sum,得到不同的结果

  • 本文关键字:np sum 结果 abs 应用 python numpy
  • 更新时间 :
  • 英文 :


这是我的代码

arr2D_x0 = np.real(np.fft.ifft2(arr2D_g, norm='ortho'))
print('arr2D_x0',np.sum(np.abs(arr2D_x0)), np.sum(np.real(arr2D_x0)), np.sum(arr2D_x0), np.unique(np.imag(arr2D_x0)))
print((np.abs(arr2D_x0) == np.real(arr2D_x0)).all(), (arr2D_x0 == np.real(arr2D_x0)).all(), (np.abs(arr2D_x0) == arr2D_x0).all())

我得到了以下输出

arr2D_x0 16241240.101077307 13039017.97206586 13039017.97206586 [0.]
False True False

我用(a^2+b^2)^0.5确认了np.abs,那么对于实数数组,abs和实数结果怎么会不同呢?差异如此之大,不容忽视。我将arr2D_x0的数据类型更改为np.float64np.float96,但结果没有任何变化。

对于实数数组,abs和实数结果如何不同?

因为他们做不同的事情
np.abs按元素计算绝对值,而np.real按元素返回复变元的实部。

为了更好地理解它们不同的原因,让我们假设arr2D_x0 = np.real(np.fft.ifft2(arr2D_g, norm='ortho'))是一个简单的数组,就像arr2D_x0 = np.array([-1.2, 1.2])一样

计算实数数组的实数部分对它没有任何作用;另一方面,计算绝对值会将负值转化为正值。所以这基本上就是你正在做的事情和不同结果的原因。

x = np.real(arr2D_x0) # array([-1.2,  1.2])
np.sum(x) # 0.0
y = np.abs(arr2D_x0)  # array([1.2, 1.2])
np.sum(y) # 2.4

最新更新