【发布时间】:2022-01-21 11:54:21
【问题描述】:
在过去几年中,NumPy 中的随机数生成进行了彻底改革。设置可重现随机数的现代方式现在是这样的:
# Set up random number generator
import numpy as np
stream = np.random.PCG64DXSM
seed = 42
rng = np.random.Generator(stream(seed))
# Draw random numbers from various distributions
a = rng.uniform (0, 1, size=10) # uniform distribution
b = rng.normal (0, 1, size=10) # normal distribution
c = rng.rayleigh(1, size=10) # Rayleigh distribution
...
这项工作很棒。三个数组a、b 和c 都包含双精度浮点数,即它们的dtype 是np.float64。我将如何将其更改为例如np.float32?
我当然可以将结果转换为 32 位,但这不是最佳的(如果我们将问题扩展到 128 位,这根本不起作用)。 docs 支持获取 32 位结果,但我不知道如何使用上述首先使用 np.random.Generator(stream(seed)) 定义 rng 的系统。另一个doc entry 表示
接受 np.float32 或 np.float64 的可选 dtype 参数 ...
但我似乎又找不到在上面的哪个地方可以放置这样的论点。
以前曾询问过similar question,但所有结果都属于旧的 NumPy 接口,而不是上面展示的现代接口。
具体来说,让我们关注最新版本的 NumPy (1.22),它确实带有一些 changes 来生成随机数,尽管我认为只是修复了一些错误。
【问题讨论】:
-
你试过 np.random.Generator(stream(seed),dtype=np.float32)
-
@David 是的,
numpy.random._generator.Generator.__init__()不允许使用dtype关键字。
标签: python python-3.x numpy random floating-point