Numpy中满足指定条件时替换整行的实现问题求助
问题原因
原代码的np.where采用逐元素匹配逻辑,values == [z, ]仅会标记第一列等于z的位置为真,第二列所有位置判定为假,因此只有第一列对应位置会被替换,第二列保持原值,无法实现整行替换的需求。
最优实现方案
直接使用NumPy布尔索引选中符合条件的行,再整行赋值即可,代码更简洁高效:
import numpy as np values = np.array([[10, 10], [11, 10], [12, 10], [13, 10], [14, 10]]) z = 13 x = 1 y = 0 # 选中第一列等于z的所有行,直接整行赋值 values[values[:, 0] == z] = [x, y]
基于原np.where写法的修改方案
如果需要保留np.where的写法,需要将布尔条件扩展为和原数组同维度的矩阵,让满足条件的整行位置都为真:
import numpy as np values = np.array([[10, 10], [11, 10], [12, 10], [13, 10], [14, 10]]) z = 13 x = 1 y = 0 # 将一维布尔条件扩展为二维,匹配原数组维度 mask = np.repeat((values[:, 0] == z)[:, np.newaxis], values.shape[1], axis=1) values = np.where(mask, np.array([x, y]), values)
内容的提问来源于stack exchange,提问作者ucei
相关产品推荐
相关产品推荐

