python - 如何在Python中生成至少20位小数的种子随机 float ?

标签 python numpy decimal precision mpmath

我想生成至少 20 位小数且范围在 -1 到 1 之间的种子随机 float 。

import numpy as np
np.random.seed(2000)
np.random.uniform(low=-1, high=1, size=2)

这是我过去会做的事情,但我的能源部研究需要更精确。

我研究了Python中的mpmath和decimal模块

import mpmath
mpmath.mp.dps = 22
xis = (mpmath.rand() - mpmath.mpf(1), mpmath.rand())

这不起作用,因为我找不到播种 mpmath.mp.rand() 的方法。

import numpy as np
from decimal import Decimal, getcontext

getcontext().prec = 20
xis = np.asarray([Decimal(f"{x}") x for x in np.random.uniform(low=-1, high=1, size=2)], dtype=np.float64)

在这里,我的 float 依赖于 numpy,并且最多具有 16-7 位小数。

如何创建具有 20 多个小数位且可播种的随机 float ?

最佳答案

一种简单的方法:您可以在必要的范围内创建随机字符串文字,并将它们提供给 Decimal 构造函数:

import random
from decimal import Decimal,getcontext
getcontext().prec = 20

def rand_decimal():
    s = ''.join(random.choice('0123456789') for _ in range(20))
    s = random.choice(['-','']) + '0.' + s
    return Decimal(s)

for _ in range(10): print(rand_decimal())

典型输出:

-0.83346823024126032930
-0.84557526920081542182
-0.82525161638966954542
0.19433739638125145525
-0.21238635133910933910
0.53423291362045018461
0.01119989426218875072
-0.60199160675918881160
-0.53317266699396870741
-0.16609409040022211062

关于python - 如何在Python中生成至少20位小数的种子随机 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69077374/

相关文章:

python - 测量浮点结果精确到小数点后 N 位的精度

python - 计算机生成一个数字,用户猜测数字,不管怎么猜总是不对

python - 数字系统转换器python

c# - 在 C# 中使用十进制值作为属性参数?

python : Numpy Matrix split

python - 分配给 NumPy 中的列

sql-server - 小数精度和小数位数

python - 如何在不使用断言的情况下指定函数输入和输出的类型?

python - 无法让我的程序在 python matplotlib 中为多个补丁设置动画

python - 我收到错误 <string> :149: RuntimeWarning: invalid value encountered in sqrt while generating a list