NumPy数组第二维度数值修改:指定元素替换问题问询
问题原因
你遇到的问题核心是两个点:
numpy.insert的作用是插入新元素而非替换原有元素,你拆分后保留了前2个元素,再执行插入操作会让最终数组最后一维长度变成4而非保持3,不符合替换需求- 你传入的
new数组形状和插入位置要求的形状不匹配,触发了广播机制,才会出现整段重复插入的问题
正确实现方案
方案1:直接索引赋值(最推荐,性能最高)
不需要拆分拼接,直接定位到要替换的位置赋值即可,你的目标元素都在最后一维索引为2的位置:
import numpy x = numpy.array([[[1, 2, 3]], [[4, 5, 6]], [[7,8,9]]]) new = numpy.array([[[10]], [[11]], [[12]]]) # 直接定位到要替换的维度赋值 x[:,:,2] = new[:,:,0] # 或者直接赋值对应形状的数组 # x[:,:,2] = [[10],[11],[12]] print(x)
输出结果就是你要的替换后的数组:
[[[ 1 2 10]] [[ 4 5 11]] [[ 7 8 12]]]
方案2:沿轴拼接(符合你原有拆分再拼接的思路)
如果你一定要沿用先取前2个元素再拼接新元素的逻辑,不要用insert,改用numpy.concatenate沿最后一维拼接即可:
y = x[:,:,:2] new = numpy.array([[[10]], [[11]], [[12]]]) final_arr = numpy.concatenate([y, new], axis=2)
内容的提问来源于stack exchange,提问作者The_perks_of_being_on_mars
相关产品推荐
相关产品推荐

