Python:使用 pyts 把一維時間序列轉換成二維圖片 1. 準備一維時間序列 2. 轉換成圖片

在之前 CSDN 上的一篇博客 —— 將一維時間序列轉化成二維圖片中,我翻譯了一篇文章,說的是將一個時間序列信號轉換成二維圖片:

然後在文章的最後發了一個 Github 代碼,這個代碼是原文作者的代碼,有人反應代碼不能跑起來。

這裏我使用 Python 的一個第三方庫 pyts,參考官方文檔,改寫了一下。測試了一下,可以在 Pyhon3.7 上成功運行。

1. 準備一維時間序列

我使用 MATLAB 生成了一個 sin x 的時間序列圖,plot 出來是這樣的:

總共有 512 個點,也就是最大能夠生成 512*512 的圖片。

要把生成的圖片保存爲 .csv 文件:

2. 轉換成圖片

接下來就是簡單地轉換成二維圖片了,先貼代碼吧,或者可以在我的 Github 上下載,裏面有批量處理和保存 GAF 圖片的代碼:

import numpy as np
import matplotlib.pyplot as plt
from pyts.image import GASF, GADF

x = np.loadtxt(open("sinx.csv","rb"),delimiter=",",skiprows=0).T
# print(type(x),x.shape)

X = x[0:]
X = X.reshape(1, -1)
print(type(X),X.shape)
image_size = 28
gasf = GASF(image_size)
X_gasf = gasf.fit_transform(X)
print(X_gasf.shape)
print(X_gasf[0,4,2],X_gasf[0,2,4])
gadf = GADF(image_size)
X_gadf = gadf.fit_transform(X)
print(X_gadf[0,1,2],X_gadf[0,2,1])

# Show the results for the first time series
plt.figure(figsize=(16, 8))
plt.subplot(121)
plt.imshow(X_gasf[0], cmap='rainbow', origin='lower')
plt.title("GASF", fontsize=16)
plt.subplot(122)
plt.imshow(X_gadf[0], cmap='rainbow', origin='lower')
plt.title("GADF", fontsize=16)
plt.savefig('sinx.jpg')
plt.show()

運行,出來的效果是這樣的:

文中的 .csv 文件和代碼都放在我的 repository 中,如果對你有幫助,可以在 Github 中給我個 Star,這會是對我的一份鼓勵與肯定!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章