我正在创建一个numpy
个随机值数组,并将它们添加到包含32位浮点数的现有数组中。我想使用与目标数组相同的dtype生成随机值,这样我就不必手动转换dtypes。目前我这样做:
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位长,所以这样做没有意义,但我想我会问是否可能。)
答案 0 :(得分:23)
问:我可以在创建随机数时为其指定dtype。
答:不,不是。 randn仅将形状接受为randn(d0,d1,...,dn)
试试这个:
x = np.random.randn(10, 10).astype('f')
或定义一个新功能,如
np.random.randn2 = lambda *args, **kwarg: np.random.randn(*args).astype(kwarg.get('dtype', np.float64))
x = np.random.randn2(10, 10, dtype='f')
如果您必须在帖子上使用您的代码,请尝试使用此代码
x = np.zeros((10, 10), dtype='f')
x[:] = np.random.randn(*x.shape)
这会将randn
的结果分配给np.zeros
答案 1 :(得分:3)
首先让我说numpy现在支持随机整数的dtypes。可以通过numpy的github上的Issue #6790跟踪此增强功能。但截至今天,此设施不适用于gaussian RNG
。我需要这个相同的工具,所以我为numpy,https://gist.github.com/se4u/e44f631b249e0be03c21c6c898059176
该修补程序仅添加了对生成float
值的支持,但它不处理其他数据类型,但它可能对某人有用。
答案 2 :(得分:0)
np.random.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'>