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

njthzxwz  于 2022-12-10  发布在  Python
关注(0)|答案(4)|浏览(171)

我正在创建一个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位,因此这样做实际上没有意义,但我想我应该问一下这是否可能。)

xoefb8l8

xoefb8l81#

问:当我创建随机数时,是否可以为它们指定一个dtype。
答:不,它不是。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分配的内存

mxg2im7a

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标准高斯。

cwtwac6a

cwtwac6a3#

我想通常您可以简单地使用randint,例如:

np.random.randint(low=0, high=256, size=(256,256,3), dtype=np.uint8)
db2dz4w8

db2dz4w84#

randn函数随机地将给定形状的数组对象初始化为“np.float64”您可以通过执行以下操作自己找到这一点:

a = np.random.rand(2,3)
b = a[1,2]
print (type(b))
print (type(a))

输出如下:

<class 'numpy.float64'>
<class 'numpy.ndarray'>

相关问题