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()