【问题标题】:How to write a sampling algorithm from a custom distribution?如何从自定义分布中编写采样算法?
【发布时间】:2014-06-08 13:39:56
【问题描述】:

我正在生成随机星系,其视线速度来自 正态分布,随机位置也来自 2d 高斯。从 NFW 配置文件 给出的这些位置更实际一点:

rho(r) = rho_0/(r/R_s*(1+r/R_s)^2

其中rho_0R_s 是常量参数。

我如何编写一个算法来从这个分布中采样?

基本上,我试图将数百个遵循这种密度分布的星系扑灭。

我一直在使用 numpy.random.normalGaussians 中进行采样,但我想从 NFW 配置文件而不是 Gaussians 中进行采样。我敢肯定,一些统计培训可能是一个不错的起点,但正确的方向会很有帮助,非常感谢。

【问题讨论】:

  • 公式中缺少括号。你能确保你写的正确吗?我假设平方项应该在分母中......另外,你介意告诉我们 NFW 代表什么吗?

标签: python algorithm numpy


【解决方案1】:

假设你有一个函数 rho(r),它从 [0..1] 中获取值并从 [0..1] 中返回值,那么这很容易:

def getRhoSample():
  #get uniform random number
  value = numpy.random.random()

  #sample my custom function
  return rho(value)

【讨论】:

  • 感谢您的快速响应,但这只是给了我随机半径的密度。我需要从密度分布中进行采样,以便随机生成的点遵循 rho(r) 给出的 NFW 配置文件。
  • 我理解使用 CDF 执行此操作的想法,但问题是 NFW 配置文件不是可归一化的标准概率密度函数;因此,当 r 趋于无穷时,cdf 不会变为 1。
猜你喜欢
  • 1970-01-01
  • 2021-08-19
  • 1970-01-01
  • 2020-04-28
  • 2018-11-27
  • 1970-01-01
  • 2016-01-04
  • 2014-08-26
  • 2020-10-07
相关资源
最近更新 更多