繁体   English   中英

从主数组获取子数组,其中每个子数组向右移动一个

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM