代码如下:
import numpy as np
from scipy.fftpack import fft
from scipy.spatial.distance import pdist
# 序列1
qy1 = [1,2,3,4,5,6,7,8]
# 序列2
qy2 = [2,3,4,5,6,7,8,9]
# 对序列1做傅里叶变换
fqy1 = fft(qy1)
qy1_5 = fqy1[:5] # 取前五个系数
# 对序列2做傅里叶变换
fqy2 = fft(qy2)
qy2_5 = fqy2[:5] # 取前五个系数
# 计算距离
X1 = np.vstack([qy1_5, qy2_5]) # 计算前五个傅里叶系数的距离
fd = pdist(X1)
print("傅里叶变换距离:", fd)
X2 = np.vstack([qy1, qy2]) # 计算两个序列的真实欧氏距离
td = pdist(X2)
print("真实距离:", td)
# 运行结果
# 傅里叶变换距离: [8.]
# 真实距离: [2.82842712]
有没有大佬告诉我哪里弄错了?
因为93年《Efficient Similarity Search In Sequence Databases 》这篇论文里提到“Another important observation is Parseval's theorem, which specifies that the Fourier transform preserves the Euclidean distance in the time or frequency domain.”应该是时域距离和频域距离是相等的(我的理解是这样的)。
求大佬指点!!!救命!!!