2016-11-15 71 views
1

我有這樣 [1,3,4,5,6,2,1,,,,] 如何使用numpy創建類似[[123] [234] [345]]的數組?

現在

一個數組,我想將其更改爲 [[1,3,4],[3,4,5],[4,5,6],[5,6,2],,,,]

我怎樣才能做到這一點使用numpy的?有沒有這樣做的功能?而且,使用循環不是一種選擇。

+0

這真的是一個數組,或只是一個列表?有多大?你將如何處理結果?有一個使用'stride_tricks'的數組方法,但這是'高級用戶'。 – hpaulj

回答

1

使用列表理解而不是庫,但爲什麼使它變得複雜。 (?你認爲這是一個循環)

x = [1,3,4,5,6,2,1] 
y = [x[n:n+3] for n in range(len(x)-2)] 

結果是:

[[1, 3, 4], [3, 4, 5], [4, 5, 6], [5, 6, 2], [6, 2, 1]] 
1

np.lib.stride_tricks.as_strided方法做到這一點。

這裏strides對於32位整數是(4,4)。如果你想要更靈活的代碼,我已經在代碼中註釋了stride參數。形狀參數決定輸出數組的尺寸。

> import numpy as np 
> A = [1,2,3,4,5,6] 
> n = 3 # output matrix has 3 columns 
> m = len(A) - (n-1) # calculate number of output matrix rows using input matrix length 
> # strides_param = np.array(A, dtype=np.int32).strides * 2 
> np.lib.stride_tricks.as_strided(A, shape=(m,n), strides=(4,4)) 
array([[1, 2, 3], 
     [2, 3, 4], 
     [3, 4, 5], 
     [4, 5, 6]]) 
+0

@beroe我用輸出編輯了答案 – TRiNE

+0

你的子列表不重疊。 – hpaulj

+0

@hpaulj我修改了代碼 – TRiNE