【问题标题】:Calculate probability density mean python计算概率密度均值python
【发布时间】:2020-04-22 10:18:02
【问题描述】:

假设我有一个概率密度函数热图作为numpy ndarray(m,n)。是否有一个函数可以自动计算将这个矩阵视为概率密度的平均值?我似乎找不到可以自动执行此操作的功能。

当然,一个简单的解决方案是创建一个权重等于数组索引的加权平均值,但似乎应该有一个内置函数可以做到这一点。

分类: 假设我的数组是heatmap = [[0,0,0,1],[0,0,1,0],[0,0,1.5,0],[0,0,0,0]]。 不,如果我们假设这不是归一化概率,您可以计算概率密度的平均值和其他属性。

例如,x 方向的平均值为

    xx = np.arange(0,heatmap.shape[1],1)
    weights = np.tile(xx,(heatmap.shape[0],1))

    mean_x = np.average(weights, weights = heatmap_avg_left)

我只是在 numpy 或 scipy 中寻找一个可以自动执行此操作和其他概率属性的函数

【问题讨论】:

  • 您能否澄清您的问题,以展示您的数组的最小示例以及您期望的含义?
  • 您是在寻找每个方向数据的第 50 个百分位,还是质心?
  • 刚刚添加了一个说明。是的,有点像将数组视为概率密度的质心。
  • 您的代码对于不在您脑海中的人来说没有多大意义。请发布一个完整的示例。
  • 请修正您的代码以使用已定义的变量...

标签: python numpy scipy probability-density


【解决方案1】:

您可以使用scipy.ndimage.center_of_mass 找到数组的质心。如果您的数组被索引到包含单个群众的地图中,您可以直接转换:

from scipy.ndimage import center_of_mass

indices = ... # shape (m, n), values in [0, k)
mass_lookup = ... # shape (k)

result = center_of_mass(mass_lookup[indices])

在这种情况下,mass_lookup 就像一张热图。如果数组包含权重,则直接使用它。

【讨论】:

  • 您能解释一下热图和权重数组之间的区别吗?
  • @Stef。我正在描述一种情况,其中数组中的整数标签对应于mass_lookup 的索引,这是一个简单的查找表。
【解决方案2】:
# assuming the array is called pdf_arr
axis = 0  # 0 for x axis (columns), 1 for y axis (rows)
marginal_pdf = pdf_arr.sum(axis=axis)
# since it's just a sample, normalize pdf
marginal_pdf /= marginal_pdf.sum()
axis_mean = (marginal_pdf * np.arange(pdf_arr.shape[1-axis])).sum()
# repeat the same for axis = 1

【讨论】:

  • 谢谢,这会奏效。我只是希望有一个用于处理概率密度的内置函数。
猜你喜欢
  • 2019-07-04
  • 2017-09-20
  • 2020-12-06
  • 1970-01-01
  • 2016-05-25
  • 2017-09-07
  • 1970-01-01
  • 2020-04-17
  • 2015-09-25
相关资源
最近更新 更多