[英]Obtaining the sub-array from the main array where each sub-array is shifted to right by one
我有一个巨大的numpy数组a = [55,12,12 ....]。现在,我想从数组a取一个大小为300的子数组(从55开始),并将一个位置向右移动(从12开始) ]并使用新的子数组。我要继续这样做,直到获得最后300个元素。 使用“ for循环”是永远的事,因为我必须执行上述操作的数组很多
我将如何加快这一过程? 这是原始的方式
i=0
WINDOW=300
while (i+WINDOW)<len(a):
new_a = np.append(new_a,np.array([a[i:i+WINDOW+1]]),axis=0)
i=i+1
这是我尝试的第二种方法,将计算时间减少了近一半
i=0
WINDOW=300
mid=int(len(a)/2)
while (i+WINDOW)<int(len(a)/2):
part1 = np.append(part1,np.array([a[i:i+WINDOW+1]]),axis=0)
part2 = np.append(part2,np.array([a[mid+i:mid+i+WINDOW+1]]),axis=0)
i=i+1
Numpy将在每次调用np.append
时重新分配空间,因为要写入的数组的大小在每次迭代时都会增加。 您可以预先分配数组,因为您知道它的大小是WINDOW
len(a)-WINDOW+1
,并显式索引。
new_a = np.zeros([len(a)-WINDOW+1, WINDOW])
for i in range(len(a)-WINDOW+1):
new_a[i] = a[i:i+WINDOW]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.