Scipy ifft 使用看似相同的输入给出不同的结果
Scipy ifft gives different results with seemingly identical input
为什么这里的 xcorr 和 xcorr2 会有很大不同? M1 和 M2 是 numpy 矩阵。 M1.shape[0] = M2.shape[0]。 xcorr 是我对这个操作的期望,但是 xcorr2 是完全不同的东西并且有虚数。 xcorr 没有虚数。
from scipy.fft import fft, ifft
xcorr = np.zeros((M1.shape[0],M1.shape[1],M2.shape[1]))
xcorr2 = xcorr.copy()
N = M1.shape[1]
for i in range(N):
V = M1[:,i][:,None]
xcorr[:,:,i] = ifft(fft(M2,axis = 0) * fft(np.flipud(V), axis = 0) ,axis = 0)
for i in range(N):
V = M1[:,i][:,None]
xcorr2[:,:,i] = fft(M2,axis = 0) * fft(np.flipud(V), axis = 0)
xcorr2 = ifft(xcorr2, axis = 0)
尝试给出 xcorr
和 xcorr2
dtype=complex
。
xcorr = np.zeros((M1.shape[0],M1.shape[1],M2.shape[1]), dtype=complex)
xcorr2 = xcorr.copy()
根据 scipy 文档,fft 和 ifft 的输出都是一个复杂的 ndarray。
您使用 np.zeros() 创建 xcorr
和 xcorr2
,因此它的默认 dtype 为 float64
。
将 fft 的输出放入 xcorr2 将导致 complex
到 float64
的转换,从而导致虚部被丢弃。
当您将 xcorr2 输入 ifft() 时,它没有虚部,因此您会得到不同的结果。
强制转换也是您在 xcorr 中看不到虚部的原因。
为什么这里的 xcorr 和 xcorr2 会有很大不同? M1 和 M2 是 numpy 矩阵。 M1.shape[0] = M2.shape[0]。 xcorr 是我对这个操作的期望,但是 xcorr2 是完全不同的东西并且有虚数。 xcorr 没有虚数。
from scipy.fft import fft, ifft
xcorr = np.zeros((M1.shape[0],M1.shape[1],M2.shape[1]))
xcorr2 = xcorr.copy()
N = M1.shape[1]
for i in range(N):
V = M1[:,i][:,None]
xcorr[:,:,i] = ifft(fft(M2,axis = 0) * fft(np.flipud(V), axis = 0) ,axis = 0)
for i in range(N):
V = M1[:,i][:,None]
xcorr2[:,:,i] = fft(M2,axis = 0) * fft(np.flipud(V), axis = 0)
xcorr2 = ifft(xcorr2, axis = 0)
尝试给出 xcorr
和 xcorr2
dtype=complex
。
xcorr = np.zeros((M1.shape[0],M1.shape[1],M2.shape[1]), dtype=complex)
xcorr2 = xcorr.copy()
根据 scipy 文档,fft 和 ifft 的输出都是一个复杂的 ndarray。
您使用 np.zeros() 创建 xcorr
和 xcorr2
,因此它的默认 dtype 为 float64
。
将 fft 的输出放入 xcorr2 将导致 complex
到 float64
的转换,从而导致虚部被丢弃。
当您将 xcorr2 输入 ifft() 时,它没有虚部,因此您会得到不同的结果。
强制转换也是您在 xcorr 中看不到虚部的原因。