使用 Python,生成 100 X 100 随机矩阵,其条目从正态分布中采样
Using Python, generate 100 X 100 random matrix whose entries are sampled from the normal distribution
使用 numpy.random 生成随机向量。在 Python 中编写代码,生成一个 100 X 100 随机矩阵,其条目是来自正态分布的样本。
这是我制作的,不确定这是否正确。我也有关于正态分布的问题。我的随机数应该来自某个池吗?例如 $[0,1]$ 或者是否有可能得到这个范围之外的值?
这是在 Jupyter Notebook 中编写的代码:
import numpy as np
a = np.random.randn(100,100)
a
array([[-0.42952803, -0.55136761, -0.45544016, ..., -0.54125441,
2.31481612, 0.93721055],
[-0.2440975 , -0.10233273, -0.06972217, ..., -0.25760561,
0.48431004, -0.91599734],
[-1.39176645, -0.79784139, -0.21914249, ..., 2.38224209,
1.57696294, 0.48747715],
...,
[ 0.38458431, -1.75968742, 1.64696889, ..., 1.43273609,
-0.74896945, 0.48588267],
[ 1.22934075, 1.27112809, -0.40593726, ..., 0.63584471,
0.11152366, -2.23030795],
[ 1.5910005 , 0.29184142, -0.01811951, ..., -0.25800051,
-0.09681777, 0.40182752]])
你做的是正确的,但有几点需要注意。
首先,np.random.randn()
专门用于从标准正态分布(均值为0,标准差为1)中绘制。根据您的问题,这听起来像是您想要的,但请注意,您也可以使用 np.random.normal(mu, sd, size=(100, 100))
,其中 mu
是您要从中采样的正态分布的平均值,而 sd
是标准偏差。
关于您关于值应该在什么范围内的问题,它们肯定不限于 [0, 1]
。正态分布是定义在所有实数上的连续概率密度函数,因此理论上您可以看到任何实数,但随着您远离均值,观察到每个值的概率会降低。
有关一般正态分布的更多信息,我建议阅读 this page 来自 Wolfram 的文章。
我认为您所做的会奏效,但是,numpy
文档建议您使用 numpy.random.standard_normal
有关 numpy.random.randn
文档的详细信息,请参阅 the note。
所以这看起来像...
import numpy as np
mat = np.random.standard_normal(size=(100, 100))
mat.size()
产生
array([[ 0.19635784, 0.19134202, -0.90622914, ..., -0.1487657 ,
0.210058 , -0.06616276],
[ 0.37758747, -1.96359795, -0.1302543 , ..., 0.27463501,
0.5956493 , 0.95462422],
[-0.06986621, 1.6122695 , -0.91379974, ..., 0.94488747,
-0.05906328, -1.09491503],
...,
[ 0.04273415, -0.7566953 , 0.34079966, ..., -0.2154078 ,
-1.42879529, -0.7601603 ],
[ 0.87875502, -0.18143793, -0.97638314, ..., 0.19633813,
1.19428871, -1.9585137 ],
[ 0.75305984, 0.26421749, -1.06839234, ..., -1.10464615,
-0.25891926, 1.2184856 ]])
使用 numpy.random 生成随机向量。在 Python 中编写代码,生成一个 100 X 100 随机矩阵,其条目是来自正态分布的样本。
这是我制作的,不确定这是否正确。我也有关于正态分布的问题。我的随机数应该来自某个池吗?例如 $[0,1]$ 或者是否有可能得到这个范围之外的值?
这是在 Jupyter Notebook 中编写的代码:
import numpy as np
a = np.random.randn(100,100)
a
array([[-0.42952803, -0.55136761, -0.45544016, ..., -0.54125441,
2.31481612, 0.93721055],
[-0.2440975 , -0.10233273, -0.06972217, ..., -0.25760561,
0.48431004, -0.91599734],
[-1.39176645, -0.79784139, -0.21914249, ..., 2.38224209,
1.57696294, 0.48747715],
...,
[ 0.38458431, -1.75968742, 1.64696889, ..., 1.43273609,
-0.74896945, 0.48588267],
[ 1.22934075, 1.27112809, -0.40593726, ..., 0.63584471,
0.11152366, -2.23030795],
[ 1.5910005 , 0.29184142, -0.01811951, ..., -0.25800051,
-0.09681777, 0.40182752]])
你做的是正确的,但有几点需要注意。
首先,np.random.randn()
专门用于从标准正态分布(均值为0,标准差为1)中绘制。根据您的问题,这听起来像是您想要的,但请注意,您也可以使用 np.random.normal(mu, sd, size=(100, 100))
,其中 mu
是您要从中采样的正态分布的平均值,而 sd
是标准偏差。
关于您关于值应该在什么范围内的问题,它们肯定不限于 [0, 1]
。正态分布是定义在所有实数上的连续概率密度函数,因此理论上您可以看到任何实数,但随着您远离均值,观察到每个值的概率会降低。
有关一般正态分布的更多信息,我建议阅读 this page 来自 Wolfram 的文章。
我认为您所做的会奏效,但是,numpy
文档建议您使用 numpy.random.standard_normal
有关 numpy.random.randn
文档的详细信息,请参阅 the note。
所以这看起来像...
import numpy as np
mat = np.random.standard_normal(size=(100, 100))
mat.size()
产生
array([[ 0.19635784, 0.19134202, -0.90622914, ..., -0.1487657 ,
0.210058 , -0.06616276],
[ 0.37758747, -1.96359795, -0.1302543 , ..., 0.27463501,
0.5956493 , 0.95462422],
[-0.06986621, 1.6122695 , -0.91379974, ..., 0.94488747,
-0.05906328, -1.09491503],
...,
[ 0.04273415, -0.7566953 , 0.34079966, ..., -0.2154078 ,
-1.42879529, -0.7601603 ],
[ 0.87875502, -0.18143793, -0.97638314, ..., 0.19633813,
1.19428871, -1.9585137 ],
[ 0.75305984, 0.26421749, -1.06839234, ..., -1.10464615,
-0.25891926, 1.2184856 ]])