有这两个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循环遍历数组并手动操作它们?
答案 0 :(得分:1)
您可以像这样使用直接索引:
a[:, :, 3:] = b
答案 1 :(得分:1)
非覆盖方法:
a[:,:,-2:]
在末尾获取零;使用a[:,:,:3]
。
根据documentation,np.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]]])