我想生成至少 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/