Python 替换三维numpy数组中的值

Python 替换三维numpy数组中的值,python,arrays,numpy,numpy-ndarray,tensor-indexing,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] ]

有两个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”形:(2,3,5),“b”形:(2,3,2)

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

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[:,:,3:]=b

您可以使用如下直接索引:

a[:,:,3:]=b
非覆盖方法:

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

  • 根据np.hstack(x)相当于
    np.concatenate(x,axis=1)
    。由于要将矩阵连接到其最内层行,因此应使用
    axis=2

代码:

非覆盖方法:

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

  • 根据np.hstack(x)相当于
    np.concatenate(x,axis=1)
    。由于要将矩阵连接到其最内层行,因此应使用
    axis=2

代码:


a[:,-2:]=b
或者简单地使用省略号符号,
a[…,-2:]=b
a[:,-2:]=b
或者简单地使用省略号符号,
a[…,-2:]=b
啊,这是第二个轴!!我试着用0和1:facepalm:啊,这是第二个轴!!我尝试使用0和1:facepalm:
>>> 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]]])