Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从主阵列获取子阵列,其中每个子阵列向右移动一个_Python_Arrays_Numpy - Fatal编程技术网

Python 从主阵列获取子阵列,其中每个子阵列向右移动一个

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]]),

我有一个巨大的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]]),axis=0)
  i=i+1
i=0
窗口=300

而(i+WINDOW)Numpy将在每次调用
np.append
时重新分配空间,因为每次迭代时要写入的数组的大小都会增加。您可以提前分配数组,因为您知道它的大小是
len(a)-WINDOW+1
by
WINDOW
,并显式索引

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