在 NumPy 和 PyTorch 中,标准正态分布在实践中是如何工作的?
How the standard normal distribution works in practice in NumPy and PyTorch?
有两点想请教:
1)
我想了解 NumPy 的 np.random.randn
和 PyTorch 的 torch.randn
中的 return 到底是什么。它们都是 return 一个带有随机数的张量,来自均值为 0 和标准差为 1 的正态分布,因此是标准正态分布。然而,这与将 x
值放入标准正态分布函数 here 并获得其各自的图像值 y
不同。 PyTorch 和 NumPy 编辑的值 return 看起来不是这样的。
对我来说,似乎这些库中的 np.random.randn
和 torch.randn
return 都是函数的 x
值,而不是图像 y
正如我在下面计算的那样。对吗?
normal = np.array([(1/np.sqrt(2*np.pi))*np.exp(-(1/2)*(i**2)) for i in range(-38,39)])
打印 normal
变量向我展示了类似的内容。
array([1.10e-314, 2.12e-298, 1.51e-282, 3.94e-267, 3.79e-252, 1.34e-237,
1.75e-223, 8.36e-210, 1.47e-196, 9.55e-184, 2.28e-171, 2.00e-159,
6.45e-148, 7.65e-137, 3.34e-126, 5.37e-116, 3.17e-106, 6.90e-097,
5.52e-088, 1.62e-079, 1.76e-071, 7.00e-064, 1.03e-056, 5.53e-050,
1.10e-043, 8.00e-038, 2.15e-032, 2.12e-027, 7.69e-023, 1.03e-018,
5.05e-015, 9.13e-012, 6.08e-009, 1.49e-006, 1.34e-004, 4.43e-003,
5.40e-002, 2.42e-001, 3.99e-001, 2.42e-001, 5.40e-002, 4.43e-003,
1.34e-004, 1.49e-006, 6.08e-009, 9.13e-012, 5.05e-015, 1.03e-018,
7.69e-023, 2.12e-027, 2.15e-032, 8.00e-038, 1.10e-043, 5.53e-050,
1.03e-056, 7.00e-064, 1.76e-071, 1.62e-079, 5.52e-088, 6.90e-097,
3.17e-106, 5.37e-116, 3.34e-126, 7.65e-137, 6.45e-148, 2.00e-159,
2.28e-171, 9.55e-184, 1.47e-196, 8.36e-210, 1.75e-223, 1.34e-237,
3.79e-252, 3.94e-267, 1.51e-282, 2.12e-298, 1.10e-314])
2) 此外,如果我们询问这些库,我想要一个来自标准正态分布的值矩阵,这意味着所有行和列都来自相同的标准分配?如果我想在每一行中分配 i.i.d,我需要在每一行的 for
循环中调用 np.random.randn
,然后 vstack
它们?
1) 是的,它们给你的是 x 而不是 phi(x),因为 phi(x) 的公式给出了采样值 x 的 概率密度。如果您想知道在区间 [a,b] 中获取值的概率,您需要对 a 和 b 之间的 phi(x) 进行积分。直觉上,如果您查看函数 phi(x),您会发现与接近 1 的值相比,您更有可能获得接近 0 的值。
查看它的一种简单方法是查看采样值的直方图。
import numpy as np
import matplotlib.pyplot as plt
samples = np.random.normal(size=[1000])
plt.hist(samples)
2) 他们是独立同分布的。只需像这样使用 2d 尺寸:
samples = np.random.normal(size=[10, 10])
有两点想请教:
1)
我想了解 NumPy 的 np.random.randn
和 PyTorch 的 torch.randn
中的 return 到底是什么。它们都是 return 一个带有随机数的张量,来自均值为 0 和标准差为 1 的正态分布,因此是标准正态分布。然而,这与将 x
值放入标准正态分布函数 here 并获得其各自的图像值 y
不同。 PyTorch 和 NumPy 编辑的值 return 看起来不是这样的。
对我来说,似乎这些库中的 np.random.randn
和 torch.randn
return 都是函数的 x
值,而不是图像 y
正如我在下面计算的那样。对吗?
normal = np.array([(1/np.sqrt(2*np.pi))*np.exp(-(1/2)*(i**2)) for i in range(-38,39)])
打印 normal
变量向我展示了类似的内容。
array([1.10e-314, 2.12e-298, 1.51e-282, 3.94e-267, 3.79e-252, 1.34e-237,
1.75e-223, 8.36e-210, 1.47e-196, 9.55e-184, 2.28e-171, 2.00e-159,
6.45e-148, 7.65e-137, 3.34e-126, 5.37e-116, 3.17e-106, 6.90e-097,
5.52e-088, 1.62e-079, 1.76e-071, 7.00e-064, 1.03e-056, 5.53e-050,
1.10e-043, 8.00e-038, 2.15e-032, 2.12e-027, 7.69e-023, 1.03e-018,
5.05e-015, 9.13e-012, 6.08e-009, 1.49e-006, 1.34e-004, 4.43e-003,
5.40e-002, 2.42e-001, 3.99e-001, 2.42e-001, 5.40e-002, 4.43e-003,
1.34e-004, 1.49e-006, 6.08e-009, 9.13e-012, 5.05e-015, 1.03e-018,
7.69e-023, 2.12e-027, 2.15e-032, 8.00e-038, 1.10e-043, 5.53e-050,
1.03e-056, 7.00e-064, 1.76e-071, 1.62e-079, 5.52e-088, 6.90e-097,
3.17e-106, 5.37e-116, 3.34e-126, 7.65e-137, 6.45e-148, 2.00e-159,
2.28e-171, 9.55e-184, 1.47e-196, 8.36e-210, 1.75e-223, 1.34e-237,
3.79e-252, 3.94e-267, 1.51e-282, 2.12e-298, 1.10e-314])
2) 此外,如果我们询问这些库,我想要一个来自标准正态分布的值矩阵,这意味着所有行和列都来自相同的标准分配?如果我想在每一行中分配 i.i.d,我需要在每一行的 for
循环中调用 np.random.randn
,然后 vstack
它们?
1) 是的,它们给你的是 x 而不是 phi(x),因为 phi(x) 的公式给出了采样值 x 的 概率密度。如果您想知道在区间 [a,b] 中获取值的概率,您需要对 a 和 b 之间的 phi(x) 进行积分。直觉上,如果您查看函数 phi(x),您会发现与接近 1 的值相比,您更有可能获得接近 0 的值。 查看它的一种简单方法是查看采样值的直方图。
import numpy as np
import matplotlib.pyplot as plt
samples = np.random.normal(size=[1000])
plt.hist(samples)
2) 他们是独立同分布的。只需像这样使用 2d 尺寸:
samples = np.random.normal(size=[10, 10])