我需要根据Java中的正态分布对网格的单元格(MXN的矩阵)进行采样。
我知道the Apache Math library具有单维采样值(1D)的功能,因此对于矢量来说没问题,但我找不到2D的替代方案。
我曾经想过两次使用1D方法:一个用于行,另一个用于cols。然而,(1)它并不完全合适,因为它将使用Von Neumann distances而不是geometrical distance,并且(2)这种方法不会避免重复(即它不会被采样)
那么,我如何根据以特定单元格(r,c)为中心的正态(高斯)分布对网格(矩阵)的单元格进行采样?
或 ,如果无法进行采样(或太复杂),我如何使用以特定单元格为中心的网格中的单元格的正态分布来分配概率( R,C)?例如,对于3x3 ::
0.1 | 0.1 | 0.1
0.1 | 0.2 | 0.1
0.1 | 0.1 | 0.1
我不确定以前的值是否真的适合任何高斯,但更重要的是,对于任何矩阵,单元格的总和必须为1.
从这里我可以迭代,然后滚动它;或滚动和迭代加起来。
答案 0 :(得分:1)
即使在1D情况下,也不清楚如何将从高斯分布采样的值映射到矢量索引;但是,如果你需要做的就是从2D高斯中采样一个值,那么Apache公共有MultivariateNormalDistribution。
协方差矩阵的对角线条目是沿两个方向的高斯分布的方差。非对角线条目是两个维度之间的协方差。如果两个方向是独立的且两者的方差均为1,则协方差矩阵将为:
double[][] covariance =
{{1d, 0d},
{0d, 1d}};