np.random.seed在Scikit-Learn教程的下面代码中做了什么?我对NumPy的随机状态生成器的东西不太熟悉,所以我真的很感谢外行人的术语解释.
np.random.seed(0)
indices = np.random.permutation(len(iris_X))
Run Code Online (Sandbox Code Playgroud) 我正在等待另一个开发人员完成一段代码,该代码将返回一个形状为np的数组(100,2000),其值为-1,0或1.
与此同时,我想随机创建一个具有相同特征的数组,这样我就可以在开发和测试方面领先一步.问题是我希望这个随机创建的数组每次都是相同的,所以我不会测试每次重新运行我的进程时不断更改其值的数组.
我可以像这样创建我的数组,但有没有办法创建它,以便每次都相同.我可以腌制物体并解开它,但想知道是否还有另一种方法.
r = np.random.randint(3, size=(100, 2000)) - 1
Run Code Online (Sandbox Code Playgroud) 我正在使用Python使用虚线为点画生成图像。破折号的周期是恒定的,改变的是破折号/空间比。这将产生如下内容:
但是,在该图像中,虚线具有统一的原点,这会产生难看的垂直装订线。因此,我尝试将原点随机化以去除排水沟。这种工作,但有一个明显的模式:
我想知道这是从哪里来的,所以我制作了一个非常简单的用虚线堆叠的测试用例:
random.uniform(-10.,+10.)(*)(初始值后,原点从-10px变为+ 10pxrandom.seed()并增加了随机性:
因此仍然存在模式。我不明白的是,要获得可见的装订线,您需要使6个或7个连续值落入同一范围内(例如,总范围的一半),这应该是1/64的概率,但是似乎发生了很多通常会在200行中生成。
我误会了吗?仅仅是我们的人类大脑正在看到没有模式的模式吗?是否有更好的方法来生成更“视觉上随机的”东西(python 2.7,最好不安装任何东西)?
(*)在这种情况下部分像素有效
附件:我使用的代码(这是一个Gimp脚本):
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
# Python script for Gimp (requires Gimp 2.10)
# Run on a 400x400 image to see something without having to wait too much
# Menu entry is in "Test" submenu of image menubar
import random,traceback
from gimpfu import *
def constant(minShift,maxShift):
return 0
def triangle(minShift,maxShift):
return random.triangular(minShift,maxShift)
def uniform(minShift,maxShift):
return random.uniform(minShift,maxShift)
def gauss(minShift,maxShift):
return random.gauss((minShift+maxShift)/2,(maxShift-minShift)/2)
variants=[('Constant',constant),('Triangle',triangle),('Uniform',uniform),('Gauss',gauss)]
def …Run Code Online (Sandbox Code Playgroud) 我正在使用scikit-learn和numpy,我想设置全局种子,以便我的工作可以重现.
我应该使用numpy.random.seed或random.seed?
编辑: 从评论中的链接,我知道它们是不同的,并且numpy版本不是线程安全的.我想知道哪一个用于创建IPython笔记本进行数据分析.scikit-learn中的一些算法涉及生成随机数,我想确保笔记本在每次运行时都显示相同的结果.
我注意到,你可以把不同数量的内部numpy.random.seed(),例如numpy.random.seed(1),numpy.random.seed(101).不同的数字是什么意思?你如何选择这些数字?
就像在 R 中一样,我想为整个脚本/会话全局设置一个随机种子,而不是每次执行函数或运行模型时都必须调用随机种子函数。我知道 sci-kit learn 使用 numpy RNG,但也找不到全局设置它的方法。
我在这里阅读了几篇关于这个主题的文章,比如这个: Python 中 numpy.random 和 random.random 之间的差异
它解释了两个 RNG 类之间的区别,但没有解释如何全局设置它。
除了每次我希望输出相同时调用随机种子之外,没有办法做到这一点吗?
## Random Library
import random
##### Random seed given
random.seed(42)
print(random.random()) #will generate a random number
##### No seed given
print(random.random()) #will generate a random number
##### Random seed given
random.seed(42)
print(random.random()) #will generate a random number
#############################
## Numpy Library
import numpy as np
##### Random seed given
np.random.seed(42)
print(np.random.random())
##### No seed given
print(np.random.random())
##### Same seed given
np.random.seed(42) …Run Code Online (Sandbox Code Playgroud) 我的问题与Python中的随机种子的作用范围有关?。在上述问题的情况下,需要说明的是Random(),模块中存在(隐藏的)全局实例random。
1)我想澄清一下是否在一个模块中设置随机种子会导致它成为其他模块中的随机种子,以及是否需要注意某些事项。
例如:给定:moduleA.py,moduleB.py
moduleA.py:
import random
import moduleB
random.seed(my_seed)
moduleB.randomfct()
Run Code Online (Sandbox Code Playgroud)
moduleB.py:
import random
def randomfct():
#do_things_using_random
Run Code Online (Sandbox Code Playgroud)
moduleB是否也使用my_seed,还是必须将种子传递给moduleB.py并再次设置?
2)设置随机种子/导入的顺序是否起作用?
例如在moduleA.py:
import random
random.seed(my_seed)
import moduleB
Run Code Online (Sandbox Code Playgroud)
3)设置numpy随机种子也是如此np.random.seed(42)吗?
我想看看我的神经网络中哪个随机数生成器包更快。
我目前正在更改 github 中的代码,其中 numpy.random 和 random 包都用于生成随机整数、随机选择、随机样本等。
我更改此代码的原因是出于研究目的,我想设置一个全局种子,以便能够比较不同超参数设置的准确度性能。问题是此时我必须为 random 包和 numpy 包设置 2 个全局种子。理想情况下,我只想设置一个种子,因为来自两个随机数生成器序列的绘图可能会更快地相关联。
但是,我不知道哪个包会表现得更好(在速度方面):numpy 或 random。因此,我想找到与完全相同的 Mersenne Twister 序列对应的两个包的种子。这样,两个模型的绘图是相同的,因此每个梯度下降步骤中的迭代次数也相同,导致速度差异仅由我使用的包引起。
我找不到任何关于种子对的文档,这些种子对两个包都以相同的随机数序列结束,而且尝试各种组合似乎有点麻烦。
我尝试了以下方法:
np.random.seed(1)
numpy_1=np.random.randint(0,101)
numpy_2=np.random.randint(0,101)
numpy_3=np.random.randint(0,101)
numpy_4=np.random.randint(0,101)
for i in range(20000000):
random.seed(i)
random_1=random.randint(0,101)
if random_1==numpy_1:
random_2=random.randint(0,101)
if random_2==numpy_2:
random_3=random.randint(0,101)
if random_3==numpy_3:
random_4=random.randint(0,101)
if random_4==numpy_4:
break
print(np.random.randint(0,101))
print(random.randint(0,101))
Run Code Online (Sandbox Code Playgroud)
但这并没有像预期的那样真正奏效。
I wanted to implement numpy.random.choice (except the replace argument of it) to see how it works.
from random import uniform
from math import fsum
def select(array, total_count, probability):
probability_accumulative = []
last_element = 0
for i in range(len(probability)):
probability_accumulative.append(last_element + probability[i])
last_element = probability_accumulative[i]
result = []
if(len(array) != len(probability)):
raise ValueError("array and probability must have the same size.")
elif(fsum(probability) != 1.0):
raise ValueError("probabilities do not sum to 1.")
else:
for i …Run Code Online (Sandbox Code Playgroud) python ×9
numpy ×6
random ×6
random-seed ×3
global ×1
numpy-random ×1
performance ×1
scikit-learn ×1
scope ×1