从样本数据计算概率向量

Calculate probability vector from sample data

我想使用 Jensen-Shannon Divergence 指标比较两个分布。为此,我需要两个 概率向量 。来自 scipy.spatial documentation.

scipy.spatial.distance.jensenshannon(p, q, base=None)[source]

Parameters:

p(N,) array_like left probability vector

q(N,) array_like right probability vector

问题

如何根据样本数据计算概率向量?

示例:

from scipy.spatial import distance
import numpy as np

x1 = np.random.normal(size=100)
x2 = np.random.normal(size=100)

p = 

q = 

jsd_metric = distance.jensenshannon(p, q)

我可以使用 scipy.stats.norm.pdf() 完成此操作吗?

p = scipy.stats.norm.pdf(x1)
q = scipy.stats.norm.pdf(x2)

概率分布(scipy中的概率向量)是基础频率分布除以样本数,所以

p = np.histogram(x1)[0] / len(x1)    
q = np.histogram(x2)[0] / len(x2)

注:

np.sum(p) == 1
np.sum(q) == 1