|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
麻烦大家指点迷津。
程序段:
- import pandas as pd
- import numpy as np
- import matplotlib.pyplot as plt
- # 函数功能:将频域数据转换成时序数据
- # bins为频域数据,n设置使用前多少个频域数据,loop设置生成数据的长度
- def fft_combine(bins, n, loops=1):
- length = int(len(bins) * loops)
- data = np.zeros(length)
- index = loops * np.arange(0, length, 1.0) / length * (2 * np.pi)
- for k, p in enumerate(bins[:n]):
- if k != 0 : p *= 2 # 除去直流成分之外, 其余的系数都 * 2
- data += np.real(p) * np.cos(k*index) # 余弦成分的系数为实数部分
- data -= np.imag(p) * np.sin(k*index) # 正弦成分的系数为负的虚数部分
- return index, data
- if __name__ == '__main__':
- ts = [12529, 11756, 13514, 14135, 17894, 12950 ,11722, 13371, 14160]
- # 平稳化
- ts_log = np.log(ts)
- ts_diff = ts_log.diff(1)
- ts_diff = ts_diff.dropna()
- print(fy[:10]) # 显示前10个频域数据
- fy = np.fft.fft(ts_diff)
- conv1 = np.real(np.fft.ifft(fy)) # 逆变换
- index, conv2 = fft_combine(fy / len(ts_diff), int(len(fy)/2-1), 1.3) # 只关心一半数据
- plt.plot(ts_diff)
- plt.plot(conv1 - 0.5) # 为看清楚,将显示区域下拉0.5
- plt.plot(conv2 - 1)
- plt.show()
复制代码
报错信息:
- Traceback (most recent call last):
- File "C:/Users/lenovo/Desktop/lihaile.py", line 25, in <module>
- ts_diff = ts_log.diff(1)
- AttributeError: 'numpy.ndarray' object has no attribute 'diff'
复制代码
本帖最后由 Twilight6 于 2020-5-23 16:13 编辑
这个报错了
改成这样即可:
- ts_log = np.log(ts)
- ts_diff = np.diff(ts_log)
- df = pd.DataFrame(ts_diff)
- ts_diff = df.dropna()
复制代码
|
|