np.array上的尺寸更改

时间:2015-07-25 19:15:07

标签: python arrays numpy

假设我们有一个大小为(n,2,4)的np.array:

my_array = np.array([[[ 0.,  0.,  0.,  0.],
                      [ 0.,  0.,  0.,  0.]],

                     [[ 0.,  0.,  0.,  0.],
                      [ 0.,  0.,  0.,  0.]]])

我无法想象如何从前一个数组中获取此数组(大小为(2,2,2,2)),它应该包含来自 my_array <的相同数据/ strong>:

np.array([[[[ 0.,  0.],
            [ 0.,  0.]],

           [[ 0.,  0.],
            [ 0.,  0.]]],


          [[[ 0.,  0.],
            [ 0.,  0.]],

           [[ 0.,  0.],
            [ 0.,  0.]]]])

我试过np.expand_dims

new_array = np.expand_dims(my_array, axis=3)

但我得到了:

array([[[[ 0.],
         [ 0.],
         [ 0.],
         [ 0.]],

        [[ 0.],
         [ 0.],
         [ 0.],
         [ 0.]]],


       [[[ 0.],
         [ 0.],
         [ 0.],
         [ 0.]],

        [[ 0.],
         [ 0.],
         [ 0.],
         [ 0.]]]])

感谢您的支持。

3 个答案:

答案 0 :(得分:2)

最简单的方法是使用reshape执行此任务:

In [2]: my_array.reshape(2,2,2,2)
Out[2]: 
array([[[[ 0.,  0.],
         [ 0.,  0.]],

        [[ 0.,  0.],
         [ 0.,  0.]]],


       [[[ 0.,  0.],
         [ 0.,  0.]],

        [[ 0.,  0.],
         [ 0.,  0.]]]])

只要有可能,使用reshape将创建数组的新视图(而不是复制任何基础数据)。在这种特殊情况下,返回具有所需形状和维数的新视图没有任何困难。

如果您对重塑是否会复制数据有任何疑问,一个有用的方法是尝试直接设置数组的.shape属性:

my_array.shape = (2,2,2,2)

如果在没有复制数据的情况下无法重塑,NumPy将引发错误而不是复制。

答案 1 :(得分:1)

您需要np.reshape而不是np.expand_dims

>>> my_array.reshape(2,2,2,2)
array([[[[ 0.,  0.],
         [ 0.,  0.]],

        [[ 0.,  0.],
         [ 0.,  0.]]],


       [[[ 0.,  0.],
         [ 0.,  0.]],

        [[ 0.,  0.],
         [ 0.,  0.]]]])

答案 2 :(得分:1)

使用重塑命令:

In [3]: a=np.arange(2*2*4).reshape(2,2,4)

In [4]: a
Out[4]: 
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],

    [[ 8,  9, 10, 11],
        [12, 13, 14, 15]]])

In [5]: a.reshape(2,2,2,2)
Out[5]: 
array([[[[ 0,  1],
        [ 2,  3]],

        [[ 4,  5],
        [ 6,  7]]],


    [[[ 8,  9],
        [10, 11]],

        [[12, 13],
        [14, 15]]]])