2014-11-14 83 views
0

在numpy数组上移动窗口的最佳方式是什么,以便每个单独的块不与前一个块重叠,并且块之间有1个元素间隙?我想我应该使用np.hstack,但我无法弄清楚切片模式。在Numpy中移动非重叠窗口

基本上我所寻找的是这样的:

a = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 
result = np.array([[0, 1, 2, 3], 
        [5, 6, 7, 8]) 

谢谢!

回答

1

您想要在简短示例中实现的功能可以通过重新整形数组,然后移除最后一列来创建“间隙”来完成。

import numpy as np 

a = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 

# get length of flat array 
a_length, = a.shape 

# reshape array 
#(column by row must respect number of elements) 
b = a.reshape((2, a_length/2)) 

# assign array except last column to a variable 
result = b[:,:-1] 
print result 

这是否足够普遍以回答您的问题?

+0

是的,它会,感谢您的想法。有趣的是,我已经在使用步幅的“skimage.util”模块中的'view_as_blocks'函数中检查了它,它对我的​​计算机上的2000元素数组是1.16ms对58ms。 – mikitk 2014-11-14 23:16:41

+0

你对“2000元阵列的1.16ms对58ms”是什么意思?请记住,您的读者没有事先知道您的数据包含什么,以及您使用它的目的。 – 2014-11-15 08:59:48