"2 * np.random.rand(100,1)"的含义



我是一名编程工程师
我试着在一本书中运行一个简单的线性回归示例。Y=4*X+6
我已经设置了np.random.seed(0)
创建X时,书中的代码使用了2 * np.random.rand(100,1)
我以以下方式创建了X1、X2、X3。下面是代码。

import numpy as np
np.random.seed(0)  
X1 = 2 * np.random.rand(5,1)  
X2 = np.random.rand(5,1)  
X3 = 2 * X2  
print('X1= ', X1)  
print('X2= ', X2)  
print('X3= ', X3)  

我有问题。

  1. 用np.random.rand(100,1(乘2是什么意思?运行上述代码的结果似乎不是简单地将值加倍或大小加倍
  2. 为什么X1和X3的结果不同
  1. 它使值加倍。你怎么会认为没有呢?

  2. 它们是不同的,因为你在两个不同的位置调用了一个随机数组。为什么期望random在两个连续调用中返回相同的值?那么,这个序列很难是随机的。

In [43]: np.random.seed(0)
...: X1 = 2 * np.random.rand(5,1)
...: X2 = np.random.rand(5,1)
...: X3 = 2 * X2
In [45]: X1
Out[45]: 
array([[1.09762701],
[1.43037873],
[1.20552675],
[1.08976637],
[0.8473096 ]])
In [46]: X2
Out[46]: 
array([[0.64589411],
[0.43758721],
[0.891773  ],
[0.96366276],
[0.38344152]])
In [47]: X3
Out[47]: 
array([[1.29178823],
[0.87517442],
[1.783546  ],
[1.92732552],
[0.76688304]])

CCD_ 4的值介于0和1之间。X3值是X2值的两倍,并且在0和2之间。X1值是不同的数字,但也在0和2之间。

我的猜测是,由于您正在设置种子,您希望np.random.rand((返回相同的值。这是一个误解。将种子设置一次意味着,从它们开始,它将返回一系列随机值。如果您随后再次将设置为相同的种子,它随后将返回相同的序列。试试这个:

np.random.seed(0)  
X1 = np.random.rand(5,1) 

np.random.seed(0)  
X2 = np.random.rand(5,1) 

X1将等于X2,因为每个都是与种子0相关联的序列的开始。

现在,试试这个:

np.random.seed(0)  
X1 = np.random.rand(5,1) 
Y1 = np.random.rand(5,1)

np.random.seed(0)  
X2 = np.random.rand(5,1)
Y1 = np.random.rand(5,1) 

现在X1=X2,Y1=Y2。但是X1!=Y1(除非你随机画两次相同的东西(。

要回答你的第一个问题,是的——你将随机抽取的结果乘以2,所以它现在将返回从0到2的元素,而不是从0到1的元素。

现在,您可能想要两个相同的随机数生成器,而不需要每次重置种子。如果是这种情况,请初始化两个numpy.randomRandomState:https://numpy.org/doc/stable/reference/random/legacy.html?highlight=numpy%20random%20randomstate#numpy.random.RandomState

或者他们的一台新发电机。然后,您可以用相同的种子初始化它们,并从一个种子中绘制一段时间,然后从另一个种子的随机序列中仍然"较早"的种子中绘制。

  1. 乘2的含义是将ndarray中的值加倍(np.srandom.rand(5,1(的结果(。您永远看不到原始值,只看到分配给X1 的加倍值

  2. 如果你调用np.srandom.rand(5,1(,你每次调用都会得到随机数,所以它们不会经常匹配,因为它们是随机的。

最新更新