2014-11-14 68 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