如何仅覆盖Numpy数组中等于指定值的部分元素?
解决方案
错误原因
你编写的代码存在语法和逻辑错误:New_X1 = [np.where(X1==1)]= X2属于错误的连续赋值写法,既没有正确初始化New_X1为原始X1的拷贝,也没有对数组的目标位置做正确赋值。
正确实现方式
首先需要保证X2的长度和X1中值为1的元素数量完全一致(你给出的示例满足该前提),可以选择以下两种常用实现方法:
方法1:布尔索引(更简洁)
直接通过布尔掩码定位X1中值为1的位置,赋值为X2的对应值:
import numpy as np # 初始化原始数组 X1 = np.array([1, 0, 1, 2, 3, 1, 3, 2, 3, 1, 0]) X2 = np.array([-1, 1, -1, -1]) # 复制原始数组避免修改原X1 New_X1 = X1.copy() # 对符合条件的位置赋值 New_X1[X1 == 1] = X2 print(New_X1)
运行输出结果:[-1 0 1 2 3 -1 3 2 3 -1 0]
方法2:使用np.where
如果需要显式通过索引定位,正确的np.where写法如下:
New_X1 = X1.copy() New_X1[np.where(X1 == 1)] = X2
两种方法的运行结果完全一致。
内容的提问来源于stack exchange,提问作者Question
相关产品推荐
相关产品推荐

