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

优化数组列分位数识别及布尔数组生成的技术咨询

按列计算分位数生成布尔数组

给定m×n的数组A,以及[0,1]范围内的百分比p,需要生成同尺寸的布尔数组B——当A[i,j]大于等于其所在列的p分位数时,B[i,j]设为True。

原始实现代码

import numpy as np

m = 200
n = 300

A = np.random.rand(m, n)

p = 0.3

quant_levels = np.zeros(n)
 
for i in range(n):
    quant_levels[i] = np.quantile(A[:,i],p)
    
B = np.array(A >= quant_levels)

更高效的实现方式

numpy的quantile函数支持指定计算轴,完全可以摆脱循环,用向量化操作完成,效率更高:

import numpy as np

m = 200
n = 300

A = np.random.rand(m, n)
p = 0.3

# 按列计算p分位数,keepdims保持维度以便广播
quant_levels = np.quantile(A, p, axis=0, keepdims=True)
# 直接通过广播完成逐元素比较
B = A >= quant_levels

关键说明

  • 原始循环在列数n较大时会拖慢速度,向量化操作能充分利用numpy的底层优化,大幅提升计算效率。
  • axis=0参数指定沿列维度计算分位数,keepdims=True让结果保持(1, n)的形状,这样和(m, n)的A比较时,numpy会自动广播到每行,无需手动调整维度。
  • 两种方式生成的B数组结果完全一致,但优化后的代码更简洁,性能更优。

内容的提问来源于stack exchange,提问作者Trevor J Richards

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 10:15:04