Python 从主阵列获取子阵列,其中每个子阵列向右移动一个
我有一个巨大的numpy数组a=[55,12,12..。现在我想从数组a开始[55]取大小为300的子数组,然后向右[12]移动一个位置,取新的子数组。我想继续这样做,直到得到最后300个元素。使用“for loops”要花很长时间,因为我有很多数组需要执行上述操作 我如何加快这个过程? 这是最初的方法Python 从主阵列获取子阵列,其中每个子阵列向右移动一个,python,arrays,numpy,Python,Arrays,Numpy,我有一个巨大的numpy数组a=[55,12,12..。现在我想从数组a开始[55]取大小为300的子数组,然后向右[12]移动一个位置,取新的子数组。我想继续这样做,直到得到最后300个元素。使用“for loops”要花很长时间,因为我有很多数组需要执行上述操作 我如何加快这个过程? 这是最初的方法 i=0 WINDOW=300 while (i+WINDOW)<len(a): new_a = np.append(new_a,np.array([a[i:i+WINDOW+1]]),
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
窗口=300
而(i+WINDOW)Numpy将在每次调用np.append
时重新分配空间,因为每次迭代时要写入的数组的大小都会增加。您可以提前分配数组,因为您知道它的大小是len(a)-WINDOW+1
byWINDOW
,并显式索引
new_a=np.zero([len(a)-WINDOW+1,WINDOW])
对于范围内的i(透镜(a)-窗口+1):
新的a[i]=a[i:i+窗口]
向我们展示您基于循环的尝试?加快什么过程?答案取决于你想对你的子数组做什么。代码和第二种方法添加了@Divakar@Paul Panzer我想加快创建这些子数组的过程,这些子数组被附加到一个numpy数组中,然后用来写入csv文件。为什么你需要将所有内容都附加在一起?切片原始数组,并将该切片写入.csv文件,而不在内存中移动。
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