Can I specify a numpy dtype when generating random values?

馋奶兔 提交于 2019-11-30 17:13:28

Q: is it possible to specify a dtype for random numbers when I create them.

A: No it isn't. randn accepts the shape only as randn(d0, d1, ..., dn)

Simply try this:

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

Or define a new function like

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

If you have to use your code on the post, try this code instead

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

This assigns the results of randn to the memory allocated by np.zeros

Let me begin by saying that numpy now supports dtypes for random integers. This enhancement can be tracked through Issue #6790 on numpy's github. But as of today, this facility is not available for the gaussian RNG. I needed this same facility so I wrote this patch for numpy, https://gist.github.com/se4u/e44f631b249e0be03c21c6c898059176

The patch only adds support for generating float values and it does not handle other data types, but it might still be helpful to someone.

np.random.randn function randomly initializes the array object of a given shape to a "np.float64" You can find this out yourself by doing as follows:

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

output as follows:

<class 'numpy.float64'>
<class 'numpy.ndarray'>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!