通过堆叠列将numpy reshape 2d矩阵转换为3d矩阵

时间:2017-08-06 03:45:31

标签: python numpy matrix

我有一个形状为(x,y)的numpy矩阵。我想获得一个张量,它是y向量的垂直堆栈,形状为(x,1)。 假设我有以下矩阵:

array([[ 1.,  2.],
       [ 1.,  2.],
       [ 1.,  2.]])

当我做np.reshape(2,3,1)时。我会得到:

array([[[ 1.],
        [ 2.],
        [ 1.]],
       [[ 2.],
        [ 1.],
        [ 2.]]])

但我想要这个:

array([[[ 1.],
        [ 1.],
        [ 1.]],
       [[ 2.],
        [ 2.],
        [ 2.]]])

1 个答案:

答案 0 :(得分:2)

In [135]: arr=np.array([[1,2],[1,2],[1,2]])
In [136]: arr.shape
Out[136]: (3, 2)
In [137]: arr.transpose()
Out[137]: 
array([[1, 1, 1],
       [2, 2, 2]])
In [138]: arr.transpose()[:,:,None]
Out[138]: 
array([[[1],
        [1],
        [1]],

       [[2],
        [2],
        [2]]])

你想要一个形状(2,3,1)。从(3,2)开始,这意味着您必须切换2个轴,然后添加一个。这可以按任何顺序完成。在这里,我选择转置来进行切换,并[:,:,None]添加尺寸。

arr.reshape(3,2,1).swapaxes(0,1)也有效。更加模糊,np.stack(arr[:,:,None],1)