我正在创建一个numpy
随机值数组,并将它们添加到一个包含32位浮点数的现有数组中。我希望使用与目标数组相同的dtype来生成随机值,这样我就不必手动转换dtype了。目前我这样做:
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位,因此这样做实际上没有意义,但我想我应该问一下这是否可能。)
4条答案
按热度按时间xoefb8l81#
问:当我创建随机数时,是否可以为它们指定一个dtype。
答:不,它不是。randn只接受randn(d0,d1,...,dn)形式的形状。
简单地试试这个:
或者定义一个新函数,如
如果您必须在帖子中使用您的代码,请尝试以下代码
这会将
randn
的结果分配给np.zeros
分配的内存mxg2im7a2#
让我开始说numpy现在支持随机整数的dtypes。这个增强可以通过numpy的github上的Issue #6790来跟踪。但是到目前为止,这个工具还不能用于
gaussian RNG
。我需要这个工具,所以我为numpy写了这个补丁,https://gist.github.com/se4u/e44f631b249e0be03c21c6c898059176该补丁只增加了对生成
float
值的支持,它不处理其他数据类型,但它可能仍然对某些人有帮助。更新日期:2020年9月27日
random.Generator提供支持
dtype
关键字的RNG,例如numpy.random.default_rng().standard_normal(size=1, dtype='float32')
给出float32
类型的1
标准高斯。cwtwac6a3#
我想通常您可以简单地使用
randint
,例如:db2dz4w84#
randn函数随机地将给定形状的数组对象初始化为“np.float64”您可以通过执行以下操作自己找到这一点:
输出如下: