【问题标题】:How to combine arrays in numpy?如何在numpy中组合数组?
【发布时间】:2019-06-21 16:30:10
【问题描述】:

我有一个 3x2x2 numpy 数组,我想将另一个 3x2 数组加入它,这样我的新数组就是 3x2x3。我一直在尝试使用堆栈和连接,但我不断收到ValueError: all input arrays must have the same shape。现有数组如下

array([[[1, 1],
        [2, 2]],

       [[3, 3],
        [4, 4]],

       [[5, 5],
        [6, 6]]])

我希望加入另一个这样的数组:

array([[1, 2],
       [3, 4],
       [5, 6]])

输出是这样的:

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

       [[3., 3., 3.],
        [4., 4., 4.]],

       [[5., 5., 5.],
        [6., 6., 6.]]])

我不确定我是否正确编写了输出,因为 numpy 显示具有 3 个维度的矩阵的方式让我感到困惑 - 结果应该具有形状 (3,2,3)。我希望迭代地执行此操作,以便我可以继续扩展矩阵,以便形状为 (3,2,4) 然后 (3,2,5) 然后 (3,2,6) 等等...

【问题讨论】:

  • 而想要的输出是..?
  • 您引用了stack 错误消息,但concatenate 抱怨all the input arrays must have same number of dimensions。正确的?你知道如何纠正吗?如何给(3,2)数组添加维度?
  • 为什么要迭代地做这个?为什么不将所有 (3,2) 数组收集到一个列表中,然后将它们与一个 concatenate 连接起来?

标签: python numpy concatenation


【解决方案1】:

将 3x2 数组重塑为 3x2x1,然后执行 dstack:

a = array([[[1, 1],
            [2, 2]],
           [[3, 3],
            [4, 4]],
           [[5, 5],
            [6, 6]]])

b = array([[1, 2],
           [3, 4],
           [5, 6]])

np.dstack((a, b[...,None]))
#array([[[1, 1, 1],
#        [2, 2, 2]],
#       [[3, 3, 3],
#        [4, 4, 4]],
#       [[5, 5, 5],
#        [6, 6, 6]]])

np.dstack((a, b[...,None])).shape
#(3, 2, 3)

或者np.concatenate沿着最后一个轴:

np.concatenate((a, b[...,None]), axis=-1)

【讨论】:

  • 能否请您给我提供b[...,None] 的参考资料?我试过b.reshape(3,2,1),但似乎不起作用。似乎只有np.dstack((a,b)) 有效。
  • 您可以查看numpy indexing,其中有一些np.newaxisNone 的示例。并且b.reshape(3,2,1) 应该与b[...,None] 工作方式相同
猜你喜欢
  • 1970-01-01
  • 2011-10-08
  • 2018-01-14
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 2015-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多