我有一个numpy数组X,其中包含时间序列。类似这样:
[[0.05, -0.021, 0.003, 0.025, -0.001, -0.023, 0.095, 0.001, -0.018]
[0.015, 0.011, -0.032, -0.044, -0.002, 0.032, -0.051, -0.03, -0.020]
[0.04, 0.081, -0.02, 0.014, 0.063, -0.077, 0.059, 0.031, 0.025]]
我可以用代码绘制这个。
fig, axes = plt.subplots(3, 1)
for i in range(3):
axes[i].plot(X[i])
plt.show()
然后会出现类似以下的内容(图表并不显示我上面写的演示值,而是其他结构类似的值)。因此,X 中的每一行都是一个时间序列。
![enter image description here](https://istack.dev59.com/lKykf.webp)
[[[0, 0, 0, 0, 0, 1]
[0, 0, 0, 0, 1, 0]
[0, 0, 0, 0, 0, 1]
[0, 0, 1, 0, 0, 0]]
[[0, 0, 1, 0, 0, 0]
[0, 0, 0, 1, 0, 0]
[0, 1, 0, 0, 0, 0]
[0, 1, 0, 0, 0, 0]]...]
如何(如果可能的话:高效地)将每个时间序列转换为矩阵,以图像的形式描述时间序列。因此,旧数组中的每一行(例如:[0.05, -0.021, 0.003, 0.025, -0.001, -0.023, 0.095, 0.001, -0.018])应该被转换为一个二维矩阵(例如:[[0,0,0,0,0,1][0,0,0,0,1,0][0,0,0,0,0,1][0,0,1,0,0,0]])。
替代描述:X中的每一行都描述一个时间序列。对于X中的每一行,我需要一个描述时间序列的二维矩阵,以图像的形式呈现(如上面所示的图形)。
“解决方案”:似乎没有很好的解决方案来完成这个任务。现在我使用了这个变通方法。
fig = plt.figure()
fig.add_subplot(111)
fig.tight_layout(pad=0)
plt.axis('off')
plt.plot(X[0], linewidth=3)
fig.canvas.draw()
data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep='')
data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,))
data
现在包含 2D 矩阵,可以通过 plt.imshow(data)
再次绘制出来,但是会有一些质量损失。
LineCollection
绘制您的数据并在2D中显示它。如果您想要一个表示2D图像中点的矩阵,您需要为每个时间序列定义相同的点间距和轴属性。 - JE_Muc