如何不修改原始NumPy数组,为指定列填充零值
问题原因
你之前的代码中,虽然用np.copy()复制得到了copy_both_channels,但后续的列置零操作仍然是在原始数组both_channels上执行的,所以才会修改原始数组。
正确实现方案
有两种常用实现方式,都不会修改原始数组:
方式1:复制原数组后修改对应列
# 保留左列、右列置零 left_channel = np.copy(both_channels) left_channel[:, 1] = 0 # 保留右列、左列置零 right_channel = np.copy(both_channels) right_channel[:, 0] = 0
方式2:初始化零数组后赋值保留列(内存效率更高)
直接创建和原数组形状、类型一致的全零数组,只把需要保留的列赋值为原数组对应值,不需要额外复制整份原数组:
left_channel = np.zeros_like(both_channels) left_channel[:, 0] = both_channels[:, 0] right_channel = np.zeros_like(both_channels) right_channel[:, 1] = both_channels[:, 1]
执行以上操作后,你可以通过print(both_channels)验证,原始数组的值不会发生任何变化,left_channel和right_channel就是你需要的两个独立数组。
内容的提问来源于stack exchange,提问作者Outspoken
相关产品推荐
相关产品推荐

