Python NumPy如何按条件对同维度数组对应元素做除法运算
NumPy按条件做对应位置元素除法实现方案
方法1:复用你已获取的np.where索引
你通过np.where(F<100)拿到的两个数组分别是符合条件元素的行索引、列索引,直接将这两个索引作为矩阵下标,即可批量取出对应位置元素完成运算:
import numpy as np F = np.array([[1, 4, 5], [-5, 180, 9], [200, 3, 7]]) P = np.array([[11, 3, 9], [4, 2, 77], [33, 4, 66]]) # 拆分出行、列索引 row_idx, col_idx = np.where(F < 100) # 初始化结果矩阵,这里默认不满足条件的位置保留F的原始值,可按需替换为np.nan、0等其他值 result = F.copy() # 对符合条件的位置执行F(i,j)/P(i,j)运算 result[row_idx, col_idx] = F[row_idx, col_idx] / P[row_idx, col_idx]
运行后得到的result结果为:
array([[ 9.09090909e-02, 1.33333333e+00, 5.55555556e-01], [-1.25000000e+00, 1.80000000e+02, 1.16883117e-01], [ 2.00000000e+02, 7.50000000e-01, 1.06060606e-01]])
方法2:布尔掩码直接索引(更简洁)
不需要拆分索引,直接把判断条件生成的布尔矩阵作为下标即可,逻辑和方法1完全一致,代码更短:
mask = F < 100 result = F.copy() result[mask] = F[mask] / P[mask]
方法3:np.where三参数写法(一步生成结果)
直接利用np.where的条件判断能力,指定满足/不满足条件时的取值,不需要提前拷贝原矩阵:
# 语法:np.where(判断条件, 条件成立时的取值, 条件不成立时的取值) # 这里不满足条件的位置保留F原值,可按需替换为np.nan等其他填充值 result = np.where(F < 100, F / P, F)
注意事项
- 如果需要规避除零错误,可以把判断条件调整为
(F < 100) & (P != 0),避免P中对应位置为0时触发运行警告 - 不满足条件位置的填充值可根据业务需求自定义,没有强制保留原F值的要求
内容的提问来源于stack exchange,提问作者emax
相关产品推荐
相关产品推荐

