标签: numpy-random

Python中numpy.random.rand与numpy.random.randn之间的差异

numpy.random.rand和之间有什么区别numpy.random.randn

从文档中,我知道它们之间的唯一区别来自每个数字的概率分布,但总体结构(维度)和使用的数据类型(浮点数)是相同的.由于相信这一点,我很难调试神经网络.

具体来说,我试图重新实现Michael Nielson神经网络和深度学习书中提供的神经网络.原始代码可以在这里找到.我的实现与原始实现相同,除了我numpy.random.randinit函数中定义和初始化权重和偏差,而不是numpy.random.randn在原始中.

但是,我random.rand用于初始化的代码weights and biases不起作用,因为网络不会学习,权重和偏差也不会改变.

两个随机函数之间的差异会导致这种奇怪吗?

python numpy neural-network numpy-random

40
推荐指数
2
解决办法
3万
查看次数

我可以在numpy.random.seed()中输入什么数字?

我注意到,你可以把不同数量的内部numpy.random.seed(),例如numpy.random.seed(1),numpy.random.seed(101).不同的数字是什么意思?你如何选择这些数字?

python numpy-random

13
推荐指数
4
解决办法
1万
查看次数

numpy.random 的 Generator 类和 np.random 方法有什么区别?

我已经使用 numpy 的随机功能一段时间了,通过调用诸如np.random.choice()np.random.randint()等方法。我现在发现了创建一个default_rng对象或其他Generator对象的能力:

from numpy.random import default_rng
gen = default_rng()
random_number = gen.integers(10)
Run Code Online (Sandbox Code Playgroud)

到目前为止我一直会使用

np.random.randint(10)
Run Code Online (Sandbox Code Playgroud)

相反,我想知道这两种方式有什么区别。

我能想到的唯一好处是跟踪多个种子,或者想要使用特定的 PRNG,但对于更通用的用例来说,也许也存在差异?

python random numpy numpy-random

8
推荐指数
1
解决办法
2316
查看次数

如何在特定范围内创建随机数组

假设我想创建一个包含5个元素的列表或numpy数组,如下所示:

array = [i, j, k, l, m] 
Run Code Online (Sandbox Code Playgroud)

哪里:

  • i 在1.5到12.4的范围内
  • j 在0到5的范围内
  • k 在4到16的范围内
  • l 在3到5的范围内
  • m 在2.4到8.9的范围内.

这是一个示例,表明某些范围包括分数.什么是一个简单的方法来做到这一点?

python arrays random numpy numpy-random

7
推荐指数
2
解决办法
5565
查看次数

如何访问numpy默认全局随机数生成器

我需要创建一个类,它接受一个随机数生成器(即一个numpy.random.RandomState对象)作为参数.在没有指定此参数的情况下,我想将它分配给numpy运行时使用的随机生成器numpy.random.<random-method>.如何访问此全局生成器?目前我这样做只是将模块对象指定为随机生成器(因为它们共享方法/鸭子类型).然而,当酸洗(无法腌制模块对象)和深度复制时,这会导致问题.我想使用numpy.random后面的RandomState对象

PS:我正在使用python-3.4

python numpy python-3.x numpy-random

6
推荐指数
1
解决办法
947
查看次数

如何使用新的 NumPy 随机数生成器?

NumPy 现在建议新代码使用defacult_rng()实例而不是新代码这一事实numpy.random让我开始思考应该如何使用它来产生良好的结果,无论是性能副还是统计。

第一个例子是我最初想写的:

import numpy as np

class fancy_name():
  def __init__(self):
    self.rg = np.random.default_rng()
    self.gamma_shape = 1.0
    self.gamma_scale = 1.0

  def public_method(self, input):
    # Do intelligent stuff with input
    return self.rg.gamma(self.gamma_shape, slef.gamma_scale)
Run Code Online (Sandbox Code Playgroud)

但我也考虑过在每个函数调用中创建一个新实例:

import numpy as np

class fancy_name():
  def __init__(self):
    self.gamma_shape = 1.0
    self.gamma_scale = 1.0

  def public_method(self, input):
    # Do intelligent stuff with input
    rg = np.random.default_rng()
    return rg.gamma(self.gamma_shape, slef.gamma_scale)
Run Code Online (Sandbox Code Playgroud)

第三种选择是将 rng 作为函数调用中的参数传递。这样,同样的 rng 也可以用于代码的其他部分。

这用于模拟环境中,该环境将经常调用以进行采样,例如转换时间。

我想问题是这三种方法中的任何一种是否都有论据,是否存在某种实践?

此外,对使用这些随机数生成器的更深入解释的任何参考(NumPy 文档和随机采样文章除外)都非常有趣!

python random numpy-random

5
推荐指数
1
解决办法
398
查看次数

转换为numpy的np.random.RandomState和Python的random.Random?

我希望能够在Python的标准Random和numpy的np.random.RandomState之间来回转换.这两个都使用Mersenne Twister算法,因此它应该是可能的(除非他们使用此算法的不同版本).

我开始研究这些对象的getstate/setstate和get_state/set_state方法.但我不知道如何转换它们的细节.

import numpy as np
import random

rng1 = np.random.RandomState(seed=0)
rng2 = random.Random(seed=0)

state1 = rng1.get_state()
state2 = rng2.getstate()
Run Code Online (Sandbox Code Playgroud)

检查每个州,我看到:

>>> print(state1) 
('MT19937', array([0, 1, 1812433255, ..., 1796872496], dtype=uint32), 624, 0, 0.0)
>>> print(state2) 
(3, (2147483648, 766982754, ..., 1057334138, 2902720905, 624), None)
Run Code Online (Sandbox Code Playgroud)

第一个状态是大小为5的元组len(state1[1]) = 624.

第二个状态是大小为3的元组len(state2[1]) = 625.似乎state2中的最后一项实际上是state1中的624,这意味着数组实际上是相同的大小.到现在为止还挺好.这些似乎相当兼容.

不幸的是,内部数字没有明显的对应关系,所以0的种子导致不同的状态,这是有道理的,因为rng1.rand() = .548rng2.random() = .844.所以,算法似乎略有不同.

但是,我不需要它们完美对应.我只需要能够在不影响第一个状态的情况下确定性地设置一个rng的状态.

理想情况下,一旦我使用第一个的状态来设置第二个的状态,而不调用任何随机方法,然后使用第二个来设置第一个的状态,第一个状态将保持不变,但这不是一个要求.

目前我有一个黑客攻击方法,只是交换我可以从两个rng中提取的624长度列表.但是,我不确定这种方法是否存在任何问题.任何对这个问题更有见识的人都可以解释一下吗?

这是我的方法,但我不确定它是否正常工作.

np_rng = np.random.RandomState(seed=0)
py_rng = random.Random(0)

# Convert python to numpy random …
Run Code Online (Sandbox Code Playgroud)

python random numpy mersenne-twister numpy-random

3
推荐指数
1
解决办法
437
查看次数

向numpy数组添加噪声的最快方法

我有一个表示图像的numpy.ndarray,我想给它添加随机噪声。我已经进行了一些测试,到目前为止,我要做的最快的解决方案是:

def RandomNoise(x):
    x += np.random.random(x.shape)
Run Code Online (Sandbox Code Playgroud)

但是,当我有大图像/阵列时,此解决方案仍然太慢。最快的方法是什么?

python numpy numpy-random

2
推荐指数
1
解决办法
1137
查看次数