lmj*_*ns3 22 python random numpy floating-point-precision
我正在创建一个numpy随机值数组并将它们添加到包含32位浮点数的现有数组中.我想使用与目标数组相同的dtype生成随机值,这样我就不必手动转换dtypes.目前我这样做:
import numpy as np
x = np.zeros((10, 10), dtype='f')
x += np.random.randn(*x.shape).astype('f')
Run Code Online (Sandbox Code Playgroud)
我想做的而不是最后一行是这样的:
x += np.random.randn(*x.shape, dtype=x.dtype)
Run Code Online (Sandbox Code Playgroud)
但randn(实际上没有一个numpy.random方法)不接受dtype参数.
我的具体问题是,是否可以在创建随机数时为其指定dtype,而无需调用astype?(我的猜测是随机数生成器是64位长,所以这样做真的没有意义,但我想我会问是否可能.)
eme*_*eth 23
问:我可以在创建随机数时为其指定dtype.
答:不,不是.randn仅将形状接受为randn(d0,d1,...,dn)
试试这个:
x = np.random.randn(10, 10).astype('f')
Run Code Online (Sandbox Code Playgroud)
或者定义一个新的功能
np.random.randn2 = lambda *args, **kwarg: np.random.randn(*args).astype(kwarg.get('dtype', np.float64))
x = np.random.randn2(10, 10, dtype='f')
Run Code Online (Sandbox Code Playgroud)
如果您必须在帖子上使用您的代码,请尝试使用此代码
x = np.zeros((10, 10), dtype='f')
x[:] = np.random.randn(*x.shape)
Run Code Online (Sandbox Code Playgroud)
这会将结果randn分配给分配的内存np.zeros
首先让我说 numpy 现在支持随机整数的 dtypes。可以通过numpy 的 github 上的问题 #6790跟踪此增强功能。但截至今天,此功能不适用于gaussian RNG. 我需要同样的工具,所以我为 numpy 编写了这个补丁,https: //gist.github.com/se4u/e44f631b249e0be03c21c6c898059176
该补丁仅增加了对生成float值的支持,不处理其他数据类型,但它可能仍然对某些人有帮助。
2020 年 9 月 27 日更新
该numpy.random.Generator提供了支持的RNGdtype所有随机变量的关键字。例如numpy.random.default_rng().standard_normal(size=1, dtype='float32')给出1类型的标准高斯float32。
| 归档时间: |
|
| 查看次数: |
16423 次 |
| 最近记录: |