生成随机值时可以指定 numpy dtype 吗?

新手上路,请多包涵

我正在创建一个 numpy 随机值数组,并将它们添加到包含 32 位浮点数的现有数组中。我想使用与目标数组相同的数据类型生成随机值,这样我就不必手动转换数据类型。目前我这样做:

 import numpy as np

x = np.zeros((10, 10), dtype='f')
x += np.random.randn(*x.shape).astype('f')

我想做的而不是最后一行是这样的:

 x += np.random.randn(*x.shape, dtype=x.dtype)

但是 randn (实际上没有 numpy.random 方法)不接受 dtype 参数。

我的具体问题是,是否可以在创建随机数时为它们指定 dtype,而不必调用 astype ? (我的猜测是随机数生成器的长度为 64 位,因此这样做并没有什么意义,但我想我会问是否可能。)

原文由 lmjohns3 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

问:是否可以在创建随机数时为它们指定一个数据类型。

答:不,不是。 randn 仅接受形状为 randn(d0, d1, …, dn)

简单地试试这个:

 x = np.random.randn(10, 10).astype('f')

或者定义一个新函数,比如

np.random.randn2 = lambda *args, dtype=np.float64: np.random.randn(*args).astype(dtype)
x = np.random.randn2(10, 10, dtype='f')

如果您必须在帖子中使用您的代码,请尝试使用此代码

x = np.zeros((10, 10), dtype='f')
x[:] = np.random.randn(*x.shape)

这会将 randn 的结果分配给 np.zeros 分配的内存

原文由 emesday 发布,翻译遵循 CC BY-SA 4.0 许可协议

首先让我说 numpy 现在支持随机整数的数据类型。可以通过 numpy 的 github 上的 问题 #6790 跟踪此增强功能。但截至今天,此功能不适用于 gaussian RNG 。我需要同样的设施,所以我为 numpy 编写了这个补丁, https: //gist.github.com/se4u/e44f631b249e0be03c21c6c898059176

该补丁仅添加了对生成 float 值的支持,它不处理其他数据类型,但它可能对某些人仍然有帮助。

2020 年 9 月 27 日更新

numpy.random.Generator 提供的 RNG 支持所有随机变量的 dtype 关键字。例如 numpy.random.default_rng().standard_normal(size=1, dtype='float32') 给出 1 类型的标准高斯 float32

原文由 Pushpendre 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题