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

如何高效对多DataFrame执行scipy.stats.binom.pmf逐元素计算?

高效实现方案:基于Numpy向量化计算

直接利用Numpy的广播机制和Scipy统计函数的向量化支持,这是处理这类逐元素运算最高效的方式,比Python循环快几个数量级。

具体步骤:

  • 将三个DataFrame转换为Numpy数组,利用广播让df2的(18,1)形状自动匹配df1和df3的(18,19)形状
  • 直接调用scipy.stats.binom.pmf进行向量化计算(该函数原生支持数组输入)
  • 将计算结果转换回DataFrame,保留原df1的索引和列名

代码示例:

import scipy.stats as stats
import pandas as pd

# 提取DataFrame的底层Numpy数组
arr1 = df1.values
arr2 = df2.values  # 形状为(18,1),会自动广播到(18,19)维度
arr3 = df3.values

# 向量化计算二项分布PMF
pmf_result = stats.binom.pmf(arr1, arr2, arr3)

# 转换为目标DataFrame
df4 = pd.DataFrame(pmf_result, index=df1.index, columns=df1.columns)

关键说明:

  • 广播机制:Numpy会自动将arr2(18行1列)扩展为18行19列的数组,匹配arr1和arr3的形状,无需手动重复数据
  • 向量化优势:Scipy的binom.pmf函数在处理数组时,是通过底层C代码实现运算,完全避开Python循环的性能开销
  • 数据合法性:确保df1的元素为非负整数(二项分布的成功次数k),df2的元素为正整数(试验次数n),df3的元素在[0,1]区间内(单次成功概率p),否则会返回NaN或触发错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:10:33