изменить массив np для глубокого изучения - PullRequest
0 голосов
/ 23 февраля 2019

Я хочу использовать keras для применения нейронной сети к моим данным временных рядов.Чтобы улучшить модель, я хочу иметь 50 временных состояний ввода на выход.Окончательный ввод должен содержать 951 выборку с 50 временными точками из 10 объектов (951, 50, 10)

. Поэтому мне необходимо изменить свои данные.Я делаю это, выполняя цикл for, но очень медленно.Есть ли способ улучшить код и сделать его быстрее?

Пример:

import numpy as np
X = np.ones((1000,10))

for i in range(50, int(X.shape[0]) + 1):
     if i == 50:
        z = 0
        X2 = np.array(X[z:i, :]).reshape((1, 50, X.shape[1]))
     else:
        X2 = np.concatenate([X2, np.array(X[z:i, :]).reshape((1, 50, X.shape[1]))])
     z = z + 1

1 Ответ

0 голосов
/ 23 февраля 2019

Мы можем использовать np.lib.stride_tricks.as_strided на основе scikit-image's view_as_windows, чтобы получить раздвижные окна. Дополнительная информация по использованию as_strided на основе view_as_windows.

from skimage.util.shape import view_as_windows

X2 = view_as_windows(X,(50,10))[:,0]

Это просто просмотр ввода и, следовательно, практически свободный во время выполнения -

In [17]: np.shares_memory(X,view_as_windows(X,(50,10))[:,0])
Out[17]: True

In [18]: %timeit view_as_windows(X,(50,10))[:,0]
10000 loops, best of 3: 32.8 µs per loop
...