Qual é a maneira mais rápida de preparar dados para RNN com numpy?

Atualmente tenho um(1631160,78) matriz np como minha entrada para uma rede neural. Gostaria de tentar algo com o LSTM, que requer uma estrutura 3D como dados de entrada. Atualmente, estou usando o código a seguir para gerar a estrutura 3D necessária, mas é super lenta (ETA> 1 dia). Existe uma maneira melhor de fazer isso com numpy?

Meu código atual para gerar dados:

def transform_for_rnn(input_x, input_y, window_size):
    output_x = None
    start_t = time.time()
    for i in range(len(input_x)):
        if i > 100 and i % 100 == 0:
            sys.stdout.write('\rTransform Data: %d/%d\tETA:%s'%(i, len(input_x), str(datetime.timedelta(seconds=(time.time()-start_t)/i * (len(input_x) - i)))))
            sys.stdout.flush()
        if output_x is None:
            output_x = np.array([input_x[i:i+window_size, :]])
        else:
            tmp = np.array([input_x[i:i+window_size, :]])
            output_x = np.concatenate((output_x, tmp))

    print
    output_y = input_y[window_size:]
    assert len(output_x) == len(output_y)
    return output_x, output_y

questionAnswers(1)

yourAnswerToTheQuestion