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

如何计算两个连续经验分布的Wasserstein距离/EMD距离?

连续分布与样本集的Wasserstein距离计算

实现方案

你想要的功能完全可以通过scipy.stats.wasserstein_distance直接实现,这个函数本身就支持长度不同的输入数组,不需要强制两者维度相等。核心思路是用大样本近似目标连续分布,再和实际数据的经验分布计算Wasserstein距离。

可运行代码

import numpy as np
from scipy.stats import wasserstein_distance

# 替换为你的实际实数数组,长度任意
actual_data = np.random.randn(3000)  # 示例数据
# 生成足够多的标准正态分布样本,近似连续分布
continuous_samples = np.random.normal(0, 1, 100000)
# 直接计算距离
distance = wasserstein_distance(actual_data, continuous_samples)
print(distance)

原理说明

  • wasserstein_distance基于两个样本的经验累积分布函数(ECDF)计算,无论输入数组长度是否一致,都会分别计算两者的ECDF,再计算对应分位点的加权距离之和。
  • 当连续分布的样本量足够大(如100000个)时,其ECDF会非常接近真实连续分布的累积分布函数(CDF),此时计算出的距离可近似看作实际数据经验分布与目标连续分布的Wasserstein距离。

注意点

  • 样本量越大,对连续分布的近似精度越高,但计算速度会略有下降,100000个样本是精度与速度的合理平衡点。
  • 如果实际数据量极小,可先通过核密度估计对数据做平滑处理后再计算,常规场景下直接使用原始数据即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 06:02:35