欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

numpy.lib.stride_tricks.as_strided() 高效切分数组

发布时间:2025/3/21 编程问答 46 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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() 高效切分数组的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。