如何根据高斯分布制作环

问题描述 投票:0回答:3

enter image description here

我在 https://arxiv.org/pdf/1606.05908.pdf 上看到了用高斯制作环的公式 但它不起作用,我找到了另一个公式,可以从 正态分布

enter image description here

它是使用GCN制作的。我用这个算法从正态分布中制作了一个环,但它也不起作用。

请帮助我

python normalization normal-distribution
3个回答
1
投票

第一个示例效果很好。这是相关的Python代码:

import matplotlib.pyplot as plt
import numpy as np

# Create and plot multivariate normal distribution
mean = [0, 0]
cov = [[1,0],[0,1]]
x, y = np.random.multivariate_normal(mean, cov, 100).T
plt.figure(1)
plt.plot(x, y, 'x')
plt.axis('equal')

# Generate z    
def g(xy):
    res_z = []
    for z in xy:
        z = np.array(z)
        res_z.append(z / 10 + z / np.linalg.norm(z))
    return res_z
xy = zip(x, y)
res_z = g(xy)

# Plot z
zx, zy = zip(*res_z)
plt.figure(2)
plt.plot(zx, zy, 'x')
plt.axis('equal')
plt.show()

此输出(如果您单击图形并将其拖动到下图所示的位置):

multivariate gaussian remapped to circle

请注意,当您运行脚本时,您的输出将稍微不同,因为

np.random.multivariate_normal
正在从基础分布中进行随机采样(平均
[0,0]
,单位协方差矩阵)。

我使用的是 Anaconda 5.1.0,Python 3.6。

HTH.


0
投票

我将提供该算法的一个更简单但更快的版本:

import numpy as np
X = np.random.multivariate_normal([0, 0], [[1, 0], [0,1]], data_size)
Z = X / 10 + X / np.sqrt(np.square(X).sum(axis=1, keepdims=True))

Z 就是你想要的结果。


0
投票

将高斯斑点转变为环是为了重新设计指数函数为 ONE 的位置。我们可以通过确定坐标为零的位置来实现。

ring_radius = 10;
x,y  = np.meshgrid(np.linspace(-16,15,32),np.linspace(-16,15,32))
ring = np.exp(-(np.sqrt(x**2+y**2)-ring_loc)**2);
io.inshow(ring):

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.