首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >生成包含随机布尔值的大型数值数组的高效内存方法

生成包含随机布尔值的大型数值数组的高效内存方法
EN

Stack Overflow用户
提问于 2015-12-28 06:34:44
回答 1查看 2.4K关注 0票数 17

我需要在不命中交换的情况下创建一个包含随机布尔值的大型numpy数组。

我的笔记本电脑有8 GB的内存。创建一个(1200, 2e6)阵列只需不到2秒,使用2.29 GB内存:

代码语言:javascript
复制
>>> dd = np.ones((1200, int(2e6)), dtype=bool)
>>> dd.nbytes/1024./1024
2288.818359375

>>> dd.shape
(1200, 2000000)

对于相对较小的(1200, 400e3)np.random.randint仍然相当快,大约需要5秒来生成一个458MB的数组:

代码语言:javascript
复制
db = np.array(np.random.randint(2, size=(int(400e3), 1200)), dtype=bool)
print db.nbytes/1024./1024., 'Mb'

但是如果我将数组的大小加倍到(1200, 800e3),那么就会遇到交换,创建db需要大约2.7分钟;(

代码语言:javascript
复制
cmd = """
import numpy as np
db = np.array(np.random.randint(2, size=(int(800e3), 1200)), dtype=bool)
print db.nbytes/1024./1024., 'Mb'"""

print timeit.Timer(cmd).timeit(1)

使用random.getrandbits需要更长的时间(~8分钟),并且还使用交换:

代码语言:javascript
复制
from random import getrandbits
db = np.array([not getrandbits(1) for x in xrange(int(1200*800e3))], dtype=bool)

(1200, 2e6)使用np.random.randint只会给出一个MemoryError

有没有更有效的方法来创建(1200, 2e6)随机布尔数组?

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

https://stackoverflow.com/questions/34485591

复制
相关文章

相似问题

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