我怎样才能从高斯分布中获得响声

时间:2018-09-22 09:33:12

标签: python normalization normal-distribution

enter image description here

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

enter image description here

使用GCN制作。我用这种算法从正态分布中制造出戒指,但它也没有用。

请帮助我

2 个答案:

答案 0 :(得分:0)

第一个示例工作正常。这是相关的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。

答案 1 :(得分: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是您想要的结果。