在Python中生成n维随机数
我想生成一些符合高斯分布的随机数。Python有一个很实用的方法叫做random.gauss()
,不过这个方法只能生成一维的随机数。我该如何编程来生成n维的随机数呢?
举个例子,在二维空间中,这个方法返回的值实际上是距离均值的距离,所以我还需要(x,y)坐标才能确定一个实际的数据点。我想我可以再生成两个随机数,但我不太确定该如何设置这些限制条件。
谢谢大家的帮助!
4 个回答
1
你需要把多维的分布情况拆分成几个一维的分布。举个例子,如果你想要一个点,它距离某个中心是高斯分布的,同时它的角度是均匀分布的,那么你可以得到这个点的极坐标。这里的距离是高斯分布的,而角度则是在0到2π之间均匀分布的。接着,如果你想把这个点转换成笛卡尔坐标系的坐标,你就需要进行坐标转换。
4
你可以使用 np.random.multivariate_normal()
这个函数来实现这个功能。它不仅适用于二维数据,还可以处理任意维度的数据。
举个例子,如果你想生成100个围绕点(1,3)的二维点,可以这样做。
mean = [1, 3]
cov = [[8, -5], [0.2, 0.2]]
x, y = np.random.multivariate_normal([0, 2], cov, 100).T
如果你想生成100个围绕点(1,10,100)的三维点,可以这样做。
mean = [1, 10, 100]
cov = [[1,1,1], [1,1,1], [1,1,1]]
x, y, z = np.random.multivariate_normal(mean, cov, 100).T
想了解更多信息,可以查看这个文档,或者直接问我。 http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.multivariate_normal.html
5
Numpy有一些多维的功能,可以和随机模块里的函数对应起来。
你需要的函数是numpy.random.normal。