【问题标题】:numpy reshape 2d matrix to 3d matrix by stacking columnsnumpy 通过堆叠列将 2d 矩阵重塑为 3d 矩阵
【发布时间】:2017-08-06 03:45:31
【问题描述】:

我有一个形状为 (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.]]])

【问题讨论】:

  • 你的意思是mat.reshape(x, 1, y)?你试过了吗?
  • 这不是我想要的。我想要一个张量 ((x,1),y)
  • 请显示示例代码以及结果与您想要的结果有何不同。
  • 假设矩阵的形状为(x,2)。我想要一个垂直堆叠为(x,1) 的张量,即两列垂直堆叠。
  • @JohnZwinck 刚刚编辑了问题

标签: python numpy matrix


【解决方案1】:
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)

【讨论】:

  • 谢谢!有效。我认为诀窍是只转置矩阵。
猜你喜欢
  • 2011-01-16
  • 2021-09-14
  • 2016-11-08
  • 1970-01-01
  • 1970-01-01
  • 2013-05-08
  • 2021-10-05
  • 1970-01-01
  • 2016-08-25
相关资源
最近更新 更多