替换3D Numpy数组中的值

时间:2019-05-08 13:57:52

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

有这两个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循环遍历数组并手动操作它们?

2 个答案:

答案 0 :(得分:1)

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

a[:, :, 3:] = b

答案 1 :(得分: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]]])