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

如何基于两个同维度numpy数组按权重生成对应直方图?

高效实现方案

你提到percents每一行取值完全一致,我们可以提前提取公共的单行percents避免重复取值,再结合向量化操作或者优化的循环实现,性能远高于原始嵌套循环。

方案1:Numpy向量化实现(推荐,性能最优)

核心用numpy内置的repeat函数(C语言实现,无Python层循环开销),代码如下:

import numpy as np

# 提前提取公共的percents单行(所有行相同,取第一行即可)
percents_single = percents[0]
# 若weights是pandas DataFrame,替换下方的weights为df.values即可
list_of_hists = [np.repeat(percents_single, row_weights).tolist() for row_weights in weights]

运行后得到的结果和你示例要求完全一致,且自动跳过权重为0的位置。

方案2:纯Python优化版(无需依赖numpy)

如果你不想引入numpy依赖,也可以用优化的纯Python写法,跳过权重为0的分支,用extend代替嵌套append后再展平,减少冗余操作:

percents_single = percents[0]
list_of_hists = []
for w_row in weights:
    current_row = []
    for p, w in zip(percents_single, w_row):
        if w > 0:
            current_row.extend([p] * w)
    list_of_hists.append(current_row)

效率说明

原始实现有两层Python级循环,还有多次append、最后展平的额外开销。以上两种方案在万行以上的大数据量场景下,性能可以提升几十到上百倍。


内容的提问来源于stack exchange,提问作者Wesley Cheek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:27:05