gpt4 book ai didi

python - 使用 numpy 创建大型随机 bool 矩阵

转载 作者:IT老高 更新时间:2023-10-28 21:03:53 25 4
gpt4 key购买 nike

我正在尝试创建一个巨大的 boolean 矩阵,该矩阵以给定的概率 p< 随机填充 TrueFalse/。一开始我用的是这段代码:

N = 30000
p = 0.1
np.random.choice(a=[False, True], size=(N, N), p=[p, 1-p])

但遗憾的是,对于这么大的 N,它似乎并没有终止。所以我试图通过这样做将它分成单行的生成:

N = 30000
p = 0.1
mask = np.empty((N, N))
for i in range (N):
mask[i] = np.random.choice(a=[False, True], size=N, p=[p, 1-p])
if (i % 100 == 0):
print(i)

现在,发生了一些奇怪的事情(至少在我的设备上):前约 1100 行生成速度非常快 - 但之后,代码变得非常慢。为什么会这样?我在这里想念什么?有没有更好的方法来创建一个大矩阵,其中 True 条目的概率为 pFalse 条目的概率为 1-p?

编辑:你们中的许多人都认为 RAM 会是个问题:因为运行代码的设备有将近 500GB 的 RAM,所以这不会是个问题。

最佳答案

问题在于您的 RAM,这些值在创建时存储在内存中。我刚刚使用这个命令创建了这个矩阵:

np.random.choice(a=[False, True], size=(N, N), p=[p, 1-p])

我使用了一个具有 64GB RAM 和 8 个内核的 AWS i3 实例。为了创建这个矩阵,htop 显示它占用了大约 20GB 的 RAM。如果您关心,这里是一个基准:

time np.random.choice(a=[False, True], size=(N, N), p=[p, 1-p])

CPU times: user 18.3 s, sys: 3.4 s, total: 21.7 s
Wall time: 21.7 s


def mask_method(N, p):
for i in range(N):
mask[i] = np.random.choice(a=[False, True], size=N, p=[p, 1-p])
if (i % 100 == 0):
print(i)

time mask_method(N,p)

CPU times: user 20.9 s, sys: 1.55 s, total: 22.5 s
Wall time: 22.5 s

请注意,掩码方法在其峰值时仅占用约 9GB 的 RAM。

编辑:第一种方法在处理完成后刷新 RAM,而函数方法保留所有这些。

关于python - 使用 numpy 创建大型随机 bool 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43528637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com