У меня есть массив N временных рядов.Примерно так:
[[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 является одной временной серией.
Но я хочу иметь массив numpy, который описывает каждый временной ряд как изображение в градациях серого (потому что позже я хочу использовать его для cnn).Поэтому я думаю, что мне нужно что-то вроде этого:
[[[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]
)
должна быть преобразована в 2D-матрицу (например, что-то вроде этого:
[[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 описывает одну серию времени. Для каждой строки в XI требуется двумерная матрица, описывающая временную серию в виде изображения (как график, показанный выше)
«Решение» : Кажется, что нет хорошего решения для этого. Я использовал этот обходной путь сейчас:
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)
снова с некоторой потерей качества.