重塑数组元组

时间:2019-11-14 02:34:33

标签: arrays numpy reshape

我有scipy.signal.con2discrete的输出,该输出生成以下元组:

(array([[1., 0.],
        [1., 1.]]), array([[ 0.66      , -0.66      ],
        [ 0.33      , -1.49999601]]), array([0., 1.]), array([0., 0.]), 1)

该对象的形状返回(5,)

我想摆脱最后一个'1',并将数组重构为形状(4,3)。也就是说,我想要的最终数组应如下所示:

1., 0., 0.66, -0.66
1., 1., 0.33, -1.5
0., 1., 0., 0.

如何在numpy中有效地做到这一点?

1 个答案:

答案 0 :(得分:0)

In [584]: (array([[1., 0.], 
     ...:         [1., 1.]]), array([[ 0.66      , -0.66      ], 
     ...:         [ 0.33      , -1.49999601]]), array([0., 1.]), array([0., 0.])
     ...: , 1)                                                                  
Out[584]: 
(array([[1., 0.],
        [1., 1.]]), array([[ 0.66      , -0.66      ],
        [ 0.33      , -1.49999601]]), array([0., 1.]), array([0., 0.]), 1)
In [585]: x=_                                                                   
In [586]: len(x)                                                                
Out[586]: 5

In [588]: [i.shape for i in x[:4]]                                              
Out[588]: [(2, 2), (2, 2), (2,), (2,)]

In [590]: np.concatenate((x[0],x[1]), axis=1)                                   
Out[590]: 
array([[ 1.        ,  0.        ,  0.66      , -0.66      ],
       [ 1.        ,  1.        ,  0.33      , -1.49999601]])

In [591]: np.concatenate((x[2],x[3]), axis=0)                                   
Out[591]: array([0., 1., 0., 0.])

In [592]: np.vstack((__, _))                                                    
Out[592]: 
array([[ 1.        ,  0.        ,  0.66      , -0.66      ],
       [ 1.        ,  1.        ,  0.33      , -1.49999601],
       [ 0.        ,  1.        ,  0.        ,  0.        ]])

类似block的东西可以用来做同样的事情:

In [594]: np.block([[x[0],x[1]],[x[2],x[3]]])                                   
Out[594]: 
array([[ 1.        ,  0.        ,  0.66      , -0.66      ],
       [ 1.        ,  1.        ,  0.33      , -1.49999601],
       [ 0.        ,  1.        ,  0.        ,  0.        ]])