【问题标题】:Numpy - Reshape and partition 2D array to 3DNumpy - 将 2D 数组重塑和分区为 3D
【发布时间】:2015-10-19 15:20:52
【问题描述】:

有没有办法将 2D 数组分区和重塑为 3D 数组。比如下面的例子:

基本上,我在左侧有一个 4x4 矩阵,我想要一个所示方式的 2x2x4 矩阵,以便我可以在第 3 轴上应用 numpy.mean。实际上,我拥有的矩阵真的很大,所以这就是为什么循环块不是一种选择。

非常感谢任何帮助。

【问题讨论】:

标签: python arrays numpy reshape


【解决方案1】:

对于您的示例,您可以使用numpy.lib.stride_tricks.as_strided

In [1]: A = np.arange(16).reshape(4, 4)

In [2]: A
Out[2]:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

In [3]: strides = A.itemsize * np.array([8, 2, 4, 1])

In [4]: x = p.lib.stride_tricks.as_strided(A, shape = (2, 2, 2, 2), strides = strides)

In [4]: x
Out[4]:
array([[[[ 0,  1],
         [ 4,  5]],

        [[ 2,  3],
         [ 6,  7]]],


       [[[ 4,  5],
         [ 8,  9]],

        [[ 6,  7],
         [10, 11]]]])

In [5]: x.reshape(4, 2, 2)
Out[5]:
array([[[ 0,  1],
        [ 4,  5]],

       [[ 2,  3],
        [ 6,  7]],

       [[ 8,  9],
        [12, 13]],

       [[10, 11],
        [14, 15]]])

步幅定义了遍历数组时要使用的偏移量,as_strided 函数使您能够使用用户定义的步幅构建一个新数组。

但是,我不知道它的效率如何,以及它是否适合您的使用。

【讨论】:

    猜你喜欢
    • 2017-09-18
    • 2016-05-22
    • 2019-09-12
    • 2019-06-26
    • 2019-07-10
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    相关资源
    最近更新 更多