numpy.lib.stride_tricks.as_strided() 高效切分数组
生活随笔
收集整理的這篇文章主要介紹了
numpy.lib.stride_tricks.as_strided() 高效切分数组
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
numpy.lib.stride_tricks.as_strided(x, shape=None, strides=None, subok=False, writeable=True)
參數:
- x: 我們要分割的數組
- shape: 返回結果的形狀shape
- strides: 在數組X的基礎上按照給的的strides來切割出給定的shape數組
返回: 返回在X的基礎上按照給的的 strides來切割出一個給定shape的新數組
X = [ [0,1,2], [3,4,5], [6,7,8] ]A = [[[[0,1],[3,4]],[[1,2],[4,5]]],[[[3,4],[6,7]],[[4,5],[7,8]]]]如上:將矩陣X轉換為包含4個小矩陣的A,矩陣X的shape為(3,3), 矩陣A的shape為(2,2,2,2)
A = as_strided(X, shape=(2,2,2,2), strides)這時候設置的strides并不是結果A的strides(32,16,8,4), strides的理解是在矩陣X的基礎上按照給的的strides,來切割出一個符合給定shape的新數組。
計算strides:
- 第3維度:A[i, j, k, x]到A[i, j, k, x+1]在X中跨過4byte
例如:從A[0,0,0,0]的值0到A[0,0,0,1]的值1,在X中經過1個元素(4byte) - 第2維度:A[i, j, k, x]到A[i, j, k+1, x]在X中跨過12byte
例如:從A[0,0,0,0]的值0到A[0,0,1,0]的值3,在X中經過3個元素(12byte) - 第1維度:A[i, j, k, x]到A[i, j+1, k, x]在X中跨過4byte
例如:從A[0,0,0,0]的值0到A[0,1,0,0]的值1,在X中經過1個元素(4byte) - 第0維度:A[i, j, k, x]到A[i+1, j, k, x]在X中跨過12byte
例如:從A[0,0,0,0]的值0到A[1,0,0,0]的值3,在X中經過3個元素(12byte) - 因此strides=(12,4,12,4)
運行代碼:
X = np.arange(9, dtype=np.int32).reshape(3,3) print(X) A = np.lib.stride_tricks.as_strided(X, shape=(2,2,2,2), strides=(12,4,12,4)) print(A)運行結果:
總結
以上是生活随笔為你收集整理的numpy.lib.stride_tricks.as_strided() 高效切分数组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python ndarray.strid
- 下一篇: numpy.power()