场景:
将两个实数数组A(代码中为data_Ax[3*i+1,:,:]),B (代码中为data_Ax[3*i+2,:,:])结合为一个复数数组C(代码中为complex_Ax[i,:,:])=A+Bj
complex_Ax=np.zeros((length_Ax,256,256))
for i in range(length_Ax-1):
complex_Ax[i,:,:]=data_Ax[3*i+1,:,:]+data_Ax[3*i+2,:,:]*1j
问题描述:
Python报错复数转实数,虚部丢失
ComplexWarning: Casting complex values to real discards the imaginary part complex_Ax[i,:,:]=data_Ax[3*i+1,:,:]+data_Ax[3*i+2,:,:]*1j
原因:
np.zeros创建的数组是实数数组,data_Ax[3*i+1,:,:]+data_Ax[3*i+2,:,:]*1j 是复数数组,相当于将复数赋给实数,产生报错
解决方案:
1、创建复数数组
complex_Ax=np.zeros((length_Ax,256,256))*1j
或
complex_Ax=np.zeros((length_Ax,256,256),dtype=complex)
2、不预定义三维数组,直接赋值给新变量(新变量不会预设数的类型),仅适用于二维数组的转换
complex_Cor=data_Cor[1,:,:]+data_Cor[2,:,:]*1j