numpy.lib.stride_tricks.as_strided() 高效切分数组
生活随笔
收集整理的這篇文章主要介紹了
numpy.lib.stride_tricks.as_strided() 高效切分数组
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
numpy.lib.stride_tricks.as_strided(x, shape=None, strides=None, subok=False, writeable=True)
參數(shù):
- x: 我們要分割的數(shù)組
- shape: 返回結(jié)果的形狀shape
- strides: 在數(shù)組X的基礎(chǔ)上按照給的的strides來(lái)切割出給定的shape數(shù)組
返回: 返回在X的基礎(chǔ)上按照給的的 strides來(lái)切割出一個(gè)給定shape的新數(shù)組
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轉(zhuǎn)換為包含4個(gè)小矩陣的A,矩陣X的shape為(3,3), 矩陣A的shape為(2,2,2,2)
A = as_strided(X, shape=(2,2,2,2), strides)這時(shí)候設(shè)置的strides并不是結(jié)果A的strides(32,16,8,4), strides的理解是在矩陣X的基礎(chǔ)上按照給的的strides,來(lái)切割出一個(gè)符合給定shape的新數(shù)組。
計(jì)算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中經(jīng)過1個(gè)元素(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中經(jīng)過3個(gè)元素(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中經(jīng)過1個(gè)元素(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中經(jīng)過3個(gè)元素(12byte) - 因此strides=(12,4,12,4)
運(yùn)行代碼:
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)運(yùn)行結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的numpy.lib.stride_tricks.as_strided() 高效切分数组的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python ndarray.strid
- 下一篇: numpy.power()