Python “的含义;2*np.random.rand(100,1)“;

Python “的含义;2*np.random.rand(100,1)“;,python,numpy,random,Python,Numpy,Random,我是个编程行家。 我试着在一本书中运行一个简单的线性回归示例。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= ',

我是个编程行家。
我试着在一本书中运行一个简单的线性回归示例。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)  
我这里有问题

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

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


  • X2
    值介于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.random.RandomState:

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

  • 乘以2的意思是将ndarray中的值加倍(np.random.rand(5,1)的结果)。您永远看不到原始值,只看到分配给X1的加倍值

  • 如果调用np.random.rand(5,1),每次调用时都会得到随机数,因此它们不会经常匹配,因为它们是随机的


  • 它应该只是将所有值加倍。X1和X3是不同的,因为每次调用
    np.random.rand()
    都会得到不同的随机数组。在分配X2之前再次调用
    np.random.seed(0)
    ,那么
    X1
    X3
    将是相同的。
    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)