У меня есть массив 3D numpy с размером данных 100000 * 24 * 53,100000 - это число экземпляров, 24 * 53 означает, что у нас есть 24 функции в 53 непрерывных временных точках. что я собираюсь сделать, это преобразовать его в два блока данных с размером 700000 * 24 * 40, 700000 * 24 * 6, (x_window = 40, y = window = 6), логика c каждого фрагмента экземпляра похожа ниже, затем объедините их вместе.
original[0]=[[1,2,3,4,5],[6,7,8,9,10]] #2*5
#if window_x=3, window_y=1
out_x[0]=[[1,2,3],[2,3,4],[6,7,8],[7,8,9]]
out_y[0]=[[4],[5],[9],[10]]
Я использую кучу для l oop для обработки данных прямо сейчас, но это очень медленно:
toty=[]
totx=[]
for i in range(original.shape[0]):
outx=[]
outy=[]
for j in range(original[i].shape[1]-window_x-window_y):
tmpx=original[i][j:j+x_window]
tmpy=original[i][j+x_window:j+x_window+y_window]
outx.append(tmpx)
outy.append(tmpy)
toty.append(outx)
toty.append(outy)
что-то У меня есть более быстрый способ сделать это? Более того, большинство данных имеют Nan в начале и в конце. У меня есть 2 списка, которые называются первым и последним для записи первого и последнего значений vaild, поэтому мой l oop примерно равен
toty=[]
totx=[]
for i in range(original.shape[0]):
outx=[]
outy=[]
for j in range(first[i],last[i]-window_x-window_y):
tmpx=original[i][j:j+x_window]
tmpy=original[i][j+x_window:j+x_window+y_window]
outx.append(tmpx)
outy.append(tmpy)
toty.append(outx)
toty.append(outy)