基于离散高斯分布的粒子样本对
SamplePairsGaussian的Python项目详细描述
#基于离散高斯的粒子样本对 python代码,以n个维度对给定的一组粒子对进行采样,其中每对粒子的概率为高斯
<;img src=“示例/图形/示例二维计数.png”width=“500”>;
##要求
Python3&numpy.
##安装和使用
使用pip: ` pip install samplePairsGaussian ` 或手动: ` python setup.py install ` 在你的代码中: ` from samplePairsGaussian import * ` 另请参见[示例](示例)文件夹。
##想法
给定一组n粒子,其位置在d维空间中,表示为i=0,1,…,n。
我们要对一对粒子进行取样,其中i,j,其中i=/=j,取样概率由下式给出: ` p(i,j) ~ exp( - |x_i - x_j|^2 / 2 sigma^2 ) ` 其中,我们使用x来表示l u 2范数,西格玛是一些选定的标准偏差。
这个问题很容易写下来,但是对于大量的粒子来说很难实现,因为它需要计算n^2距离。
- 另一个问题是,我们可能希望:
- 添加粒子。
- 移除一个粒子。
- 移动粒子。
在这种情况下,并非所有的距离都会受到影响-这些操作的顺序应该是n。然而,如果我们通过形成cdf来抽样离散分布,我们将需要重新计算它,这是昂贵的。或者,如果我们使用拒绝抽样,我们必须有一个良好的候选(信封)分布,使接受率高。
这个库试图找出用python执行这些操作的最有效方法。
该库减少计算成本的一个关键方法是引入粒子距离的截断,其中不考虑采样时由大于截断的距离分隔的粒子对。很自然地,这是标准偏差的某些选择倍数,即对于某些标准偏差,m*sigma。如果使用拒绝抽样从均匀分布中抽取,则接受率应该近似为cIT>(SqRT(2×PI)*sigma)/(2×m×sigma)=1.253/m</cTIT>。(在第一个方程中:高斯分布的面积是1,除以宽度2*m*sigma和高度1/(sqrt(2*pi)*sigma)的均匀分布面积)。
通常,我们避免使用for循环,并且广泛依赖使用numpy的数组操作。
###多种物种
也支持多个物种,其中我们有多个物种,但希望绘制同一物种的两个粒子(任何物种的两个粒子都可以通过忽略物种标签来完成)。
具体来说,probCalculatorMultispecies和samplerMultispecies类实现了这一点。
##示例
请参阅[示例](示例)文件夹。