java - 如何根据正态(高斯)分布对网格(矩阵)的单元格进行采样?

标签 java matrix gaussian normal-distribution stochastic

我需要根据 Java 中的正态分布对网格(MXN 矩阵)的单元格进行采样。

我知道the Apache Math library具有对一维(1D)值进行采样的函数,因此对于 vector 来说很好,但我找不到任何 2D 的替代方案。

我曾想过两次使用一维方法:一次用于行,另一次用于列。然而,(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。

从这里我可以迭代,并为之努力;或滚动并迭代相加。

最佳答案

即使在一维情况下,也不清楚如何将从高斯分布采样的值映射到 vector 索引;然而,如果您需要做的只是从 2D 高斯采样一个值,Apache commons 有 MultivariateNormalDistribution

协方差矩阵的对角线项是沿两个方向的高斯分布的方差。非对角线条目是两个维度之间的协方差。如果两个方向是独立的并且方差均为 1,则您的协方差矩阵将为:

double[][] covariance =
                 {{1d, 0d},
                  {0d, 1d}};

关于java - 如何根据正态(高斯)分布对网格(矩阵)的单元格进行采样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35611854/

相关文章:

java - Spring AOP - 拦截其祖先有注释的类

R - 混淆矩阵中缺失因子的条件替换

android - Android中canvas和matrix是什么关系?

python - 在 Python 中绘制垂直正态分布

java - 何时使用线程池而不是调用新线程

java - 预处理数据以进行报告

python - 将高斯与四边形集成时突然下降

distribution - 分布在正态分布的*部分*上的算法

java - 如何在罗马数字类上实现java.lang.Comparable接口(interface)?

Matlab 从 3D 矩阵中删除所有其他元素