我有這樣 [1,3,4,5,6,2,1,,,,]
如何使用numpy創建類似[[123] [234] [345]]的數組?
一個數組,我想將其更改爲 [[1,3,4],[3,4,5],[4,5,6],[5,6,2],,,,]
我怎樣才能做到這一點使用numpy的?有沒有這樣做的功能?而且,使用循環不是一種選擇。
我有這樣 [1,3,4,5,6,2,1,,,,]
如何使用numpy創建類似[[123] [234] [345]]的數組?
一個數組,我想將其更改爲 [[1,3,4],[3,4,5],[4,5,6],[5,6,2],,,,]
我怎樣才能做到這一點使用numpy的?有沒有這樣做的功能?而且,使用循環不是一種選擇。
使用列表理解而不是庫,但爲什麼使它變得複雜。 (?你認爲這是一個循環)
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]]
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]])
這真的是一個數組,或只是一個列表?有多大?你將如何處理結果?有一個使用'stride_tricks'的數組方法,但這是'高級用戶'。 – hpaulj