wasserstein_distance
所属模块:scipy
功能:衡量两个分布之间的相似性
实例1:计算EMD距离值
#code-python(3.6)
from scipy.stats import wasserstein_distance
x0 = wasserstein_distance([0, 1, 3], [0, 1, 3]) #相同的分布,分布的差异为0
x1 = wasserstein_distance([3, 1, 0], [0, 1, 3]) #相同分布,但元素顺序打乱,分布的差异值仍然为0
x2 = wasserstein_distance([0, 1, 2], [0, 1, 3]) #分布中只有部分值相同,分布的差异值仍然为0.3
x3 = wasserstein_distance([4, 5, 6], [0, 1, 3]) #分布完全不同,分布的差异值为3.6
print("x0 = ",x0)
print("x1 = ",x1)
print("x2 = ",x2)
print("x3 = ",x3)
函数说明
scipy.stats.wasserstein_distance(u_values, v_values, u_weights=None, v_weights=None)
返回值说明
返回一个浮点数float,返回值越大,两个分布的距离差别越大
参数说明
u_values, v_values 要计算距离的两个分布的集合,形式可以是列表
u_weights, v_weights 样本点的权重,若总权重不为1,则会被归一化为1;默认是每个点的权重都一样
实例2:分布中每个点的权重不同
#code-python(3.6)
from scipy.stats import wasserstein_distance
x = wasserstein_distance([3.4, 3.9, 7.5, 7.8], [4.5, 1.4],[1.4, 0.9, 3.1, 7.2], [3.2, 3.5])
#分布1是[3.4, 3.9, 7.5, 7.8],每个点的权重是[1.4, 0.9, 3.1, 7.2];
#分布2是[4.5, 1.4],每个点的权重是[3.2, 3.5];
print("x = ",x)