为什么np.random.seed(0)不能确定数组的创建?

时间:2019-03-17 17:59:30

标签: python numpy

为了获得确定的结果,我尝试使用@objc func addNewPerson(){ let picker = UIImagePickerController() let ac = UIAlertController(title: "Choose image", message: nil, preferredStyle: .actionSheet) let camera = UIAlertAction(title: "Camera", style: .default){ [weak self] _ in if UIImagePickerController.isSourceTypeAvailable(.camera) { picker.allowsEditing = false picker.delegate = self picker.sourceType = .camera self?.present(picker,animated: true) }else{ let alert = UIAlertController(title: "Warning", message: "You don't have camera", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) self?.present(alert, animated: true, completion: nil) } } ac.addAction(camera) let galerie = UIAlertAction(title: "Photo library", style: .default){ [weak self] _ in picker.allowsEditing = true picker.delegate = self self?.present(picker,animated: true) } ac.addAction(galerie) ac.addAction(UIAlertAction(title: "Cancel", style: .cancel)) present(ac,animated: true) } ,但我注意到,它不像我想象的那样起作用。
一个简单的代码片段演示如下:

np.random.seed(0)

上面的代码段创建以下输出:

import numpy as np 
np.random.seed(0)
error = np.random.rand(2,5)
print('error: \n' ,error)

我可以根据需要多次运行代码,并且输出是确定的。但是当我尝试创建第二个数组时,情况就不再如此了!
下面的代码段显示了这一点:

error: 
 [[ 0.5488135   0.71518937  0.60276338  0.54488318  0.4236548 ]
 [ 0.64589411  0.43758721  0.891773    0.96366276  0.38344152]]

输出:

import numpy as np 
np.random.seed(0)
error = np.random.rand(2,5)
error2 = np.random.rand(2,5)
print('error: \n' ,error)
print('error2: \n' ,error2) 

我在这里想念什么?我以为设置种子可以确定性的行为,但是显然这不适用于这里!这里发生了什么?

2 个答案:

答案 0 :(得分:2)

您每次必须重新播种RNG。

import numpy as np 
np.random.seed(0)
error = np.random.rand(2,5)
np.random.seed(0)
error2 = np.random.rand(2,5)
print('error: \n' ,error)
print('error2: \n' ,error2)

否则,您只是继续随机序列,而不是重新开始。

答案 1 :(得分:1)

如果(伪)随机数生成器使用相同的种子(重新)初始化,它将生成相同的数字序列

np.random.seed(0)
print (np.random.rand(),np.random.rand())

0.5488135039273248 0.7151893663724195

np.random.seed(0)
print (np.random.rand(),np.random.rand())

0.5488135039273248 0.7151893663724195

如果每次为一个种子生成相同的随机数,则它将不是(伪)随机数生成器。这将是一些确定性函数f(seed)。当您播种它时,数字的顺序是确定性的,但它们本身的数字是随机的。