【问题标题】:Replace values in a 3d numpy array替换 3d numpy 数组中的值
【发布时间】:2019-09-26 07:01:20
【问题描述】:

有这两个 numpy 数组:

a = np.array([
    [
        [1,2,3,0,0],
        [4,5,6,0,0],
        [7,8,9,0,0]
    ],
    [
        [1,3,5,0,0],
        [2,4,6,0,0],
        [1,1,1,0,0]
    ]
])

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

有形状:

"a" shape: (2, 3, 5), "b" shape: (2, 3, 2)

我想将数组a 中的最后两个元素替换为数组b 中的元素,例如

c = np.array([
    [
        [1,2,3,1,2],
        [4,5,6,2,3],
        [7,8,9,3,4]
    ],
    [
        [1,3,5,4,1],
        [2,4,6,5,2],
        [1,1,1,6,3]
    ]
])

但是,np.hstack((a[:,:,:-2], b)) 会引发值错误:

除连接轴外的所有输入数组维度必须 完全匹配

通常看起来它不是正确使用的功能。附加也不起作用。

numpy 中是否有一种方法可以做到这一点,还是我需要使用 for 循环遍历数组并手动操作它们?

【问题讨论】:

  • a[:, :, -2:] = b
  • 或者简单地使用省略号,a[..., -2:] = b

标签: python arrays numpy numpy-ndarray tensor-indexing


【解决方案1】:

非覆盖方法:

  • a[:,:,-2:] 获取末尾的零;使用a[:,:,:3]

  • 根据documentationnp.hstack(x) 等价于np.concatenate(x, axis=1)。由于您想在最里面的行加入矩阵,您应该使用axis=2

代码:

>>> np.concatenate((a[:,:,:3], b), axis=2)
array([[[1, 2, 3, 1, 2],
        [4, 5, 6, 2, 3],
        [7, 8, 9, 3, 4]],

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

【讨论】:

  • 啊这是第二轴!!我正在尝试使用 0 和 1 :facepalm:
【解决方案2】:

你可以像这样使用直接索引:

a[:, :, 3:] = b

【讨论】:

    猜你喜欢
    • 2013-09-11
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 2014-10-09
    相关资源
    最近更新 更多