首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在numpy中生成随机int64数组的最简单方法?

在numpy中生成随机int64数组的最简单方法?
EN

Stack Overflow用户
提问于 2016-04-22 15:09:13
回答 2查看 12.2K关注 0票数 7

我想使int64的随机数组在不属于int32限制的范围内均匀分布。

randintrandom_integers,但他们与int32合作;提供较大的上限生产high is out of bounds for int32

如何生成具有指定范围的随机int64数组?

可能的解决办法:

  • 使用浮动发生器。在这种情况下,它的分辨率不是很差吗?
  • 生成随机字节,将它们解释为int64数组,然后通过lower + x % (upper - lower)进行规范化。但是int32一代也有同样的归一化吗?它不影响均匀性吗?

我不是错过了一些更简洁和方便的方法吗?

为什么随机方法只产生floatint32

EN

回答 2

Stack Overflow用户

发布于 2016-04-22 15:42:55

编辑:

在numpy > 1.11.0:的窗口上使用dtype

正如@John Y建议的那样,使用dtype作为带有np.random.randint的命名参数似乎可以将整数转换成所需的格式。

代码语言:javascript
复制
a = np.random.randint(2147483647, 9223372036854775807, size=3, dtype=np.int64)

端编辑

您可以通过为randint设置范围来直接生成数组;它可能比数组的零碎生成和聚合更有效:

Docstring:

代码语言:javascript
复制
randint(low, high=None, size=None)

大小范围如果int 32:

代码语言:javascript
复制
ii32 = np.iinfo(np.int32)
iinfo(min=-2147483648, max=2147483647, dtype=int32)

int64 <-> c长的大小范围

代码语言:javascript
复制
ii64 =  np.iinfo(np.int64)
iinfo(min=-9223372036854775808, max=9223372036854775807, dtype=int64)

生成一个val > int32.max:的int64数组

代码语言:javascript
复制
a = np.random.randint(2147483647, 9223372036854775807, size = 3)
array([4841796342900989982,   43877033468085758,  205656391264979944])

检查数据类型:按预期提供int64

代码语言:javascript
复制
a.dtype
dtype('int64')

numpy.randint为您提供了一个在指定范围内的统一分布(注意,该范围不包括两端,不像numpy.randint)

票数 8
EN

Stack Overflow用户

发布于 2016-04-22 15:16:00

您可以使用random.randint并转换返回值:

代码语言:javascript
复制
>>> import numpy as np
>>> import random
>>> np.int64(random.randint(10000, 1000000000000))
321601597066

我不能保证这是最快的方法,但至少它有效而且非常清晰.(为了得到一个数组,只需做很多次)。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36797420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档