Как равномерно выполнить выборку из нелинейно преобразованного симплекса?Python

Программы на Python
Anonymous
Как равномерно выполнить выборку из нелинейно преобразованного симплекса?

Сообщение Anonymous »

Следующий алгоритм предназначен для равномерной выборки векторов приоритета (или критериев) из преобразованной версии симплекса (который представляет собой поверхность в трехмерном пространстве). Преобразование предполагает взятие мощности одного из весов. Не могли бы вы проверить расчет плотности по формуле Якобиана, правильность выборки по важности и правильность расчета максимальной плотности?
Для максимальной плотности:
if power >= 1:
max_densidy = power # Maximum at w=1
else:
max_densidy = power * np.power(0.01, power - 1)

Для выборки:
samples = []
while len(samples) < n_samples:
# Sample from the standard 2-simplex
u = np.random.uniform(0, 1, 2)
u = np.sort(u)

w = np.array([u[0], u[1] - u[0], 1 - u[1]])

# Compute the density correction (Jacobian factor)
# The transformation stretches/compresses the surface

# The Jacobian determinant factor for the surface measure
density = power * np.power(w[transform_idx], power - 1)

# Rejection sampling
if np.random.uniform(0, max_density)

Подробнее здесь: https://stackoverflow.com/questions/797 ... ed-simplex

Вернуться в «Python»