我有一个3D numpy数组,数据大小为100000 * 24 * 53,100000是实例数,24 * 53表示我们在53个连续时间点具有24个要素。我要做的是将其转换为大小为700000 * 24 * 40,700000 * 24 * 6,(x_window = 40,y = window = 6)的两个数据块,每个实例切片的逻辑如下在一起。
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]]
我现在正在使用一堆for循环来处理数据,但这非常慢:
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)
类似的东西,我有更快的方法吗? 而且,大多数数据在头和尾都有难解之谜 我有2个名为first和last的列表来记录第一个和最后一个有效值,所以我的循环就像
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)