“2*np.rand.rand(100,1)”的含义

2024-09-22 16:42:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我是个编程行家。
我试着在一本书中运行一个简单的线性回归示例。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的结果不同

Tags: 方法代码import示例编程np线性random
3条回答

我猜您希望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.random.RandomState: https://numpy.org/doc/stable/reference/random/legacy.html?highlight=numpy%20random%20randomstate#numpy.random.RandomState

或者他们的新发电机。然后,您可以使用相同的种子对它们进行初始化,并从一个种子中提取一段时间,然后从该种子的随机序列中“更早”的另一个种子中提取

  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]])

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

相关问题 更多 >