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

如何在Rust Polars中实现ewm_mean指数加权移动平均?

在Rust Polars中实现指数加权移动平均(EWM Mean)

Rust版Polars确实没有Python版那样直接的ewm_mean方法,你需要通过EWMOptions结构体配置参数后,结合ewm()和mean()方法来实现,以下是具体解决方法:

正确代码示例

首先确保导入必要的模块:

use polars::prelude::*;

然后编写计算逻辑:

// 示例DataFrame
let df = df! {
    "myCol" => [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]
}.unwrap();

// 配置EWM参数,对应Python中的com=50
let ewm_opts = EWMOptions::default()
    .com(Some(50.0)) // 设置中心周期,和Python的ewm_mean(50)参数对应
    .adjust(true) // 保持和Python默认一致的调整逻辑
    .ignore_nulls(true);

// 计算EWM均值
let result = df
    .with_columns([
        col("myCol")
            .ewm(ewm_opts)
            .mean()
            .alias("ewm_mean_com_50")
    ])
    .unwrap();

println!("{}", result);

参数对应说明

你之前的推测完全正确:

  • Python版的ewm_mean(50)实际上是把com=50转换为平滑系数alpha,公式为alpha = 2/(com + 1)(默认adjust=true时的计算方式)。
  • Rust版需要手动通过EWMOptions配置参数,支持直接设置com、alpha或span,三者可以互相转换:
    • alpha = 1/(span)(当使用span时)
    • alpha = 2/(com + 1)(当使用com时)
    • alpha = 1/(halflife + 1)(当使用halflife时)

注意事项

  • Rust版Polars的EWMOptions默认值和Python版一致:adjust=true、ignore_nulls=true,如果需要不同的行为可以手动修改。
  • 若想直接用alpha计算,也可以跳过com,直接设置.alpha(Some(2.0/(50.0+1.0))),结果和com=50一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 12:34:53