You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Numpy计算二维数组每行0.75分位数时排除零值参与运算

方法1:逐行过滤零值计算(全版本兼容,逻辑直观)

直接遍历数组每一行,过滤掉零值后再调用分位数计算函数,适配所有numpy版本:

import numpy as np

# 示例数组
arr = np.array([
    [5, 3, 2, 0, 0, 1, 6, 9, 11, 1, 4, 1],
    [0, 0, 12, 0, 1, 0, 0, 2, 0, 30, 2, 2],
    [120, 2, 10, 3, 0, 0, 2, 7, 9, 5, 0, 0]
])

quantile_075 = []
for row in arr:
    # 筛选当前行非零值
    non_zero_vals = row[row != 0]
    quantile_075.append(np.quantile(non_zero_vals, 0.75))

print(quantile_075)

以你举的第二行非零值[12,1,2,30,2,2]为例,计算得到的0.75分位数为8.5,符合预期。

方法2:向量化计算(适合大规模数组,性能更高)

如果数组行数很多,循环遍历效率低,可以将零值替换为nan后调用np.nanquantile直接按行计算:

# 零值替换为nan
arr_with_nan = np.where(arr != 0, arr, np.nan)
# 直接按行计算0.75分位数,自动忽略nan
quantile_075 = np.nanquantile(arr_with_nan, 0.75, axis=1)

注:np.nanquantile在numpy 1.15及以上版本可用

掩码数组实现补充

你提到的np.ma模块没有quantile的问题,仅存在于numpy 1.23以下的版本。如果可以升级numpy版本,也可以直接用掩码数组实现:

# 把零值设为掩码
masked_arr = np.ma.masked_equal(arr, 0)
quantile_075 = np.ma.quantile(masked_arr, 0.75, axis=1)

内容的提问来源于stack exchange,提问作者Chong Onn Keat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 12:45:04