【发布时间】:2017-09-17 15:00:57
【问题描述】:
我正在尝试创建一个巨大的boolean 矩阵,该矩阵以给定的概率p 随机填充True 和False。一开始我用的是这段代码:
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 条目的概率为 p 和 False 条目的概率为 1-p?
编辑:你们中的许多人都认为 RAM 会是个问题:因为运行代码的设备有将近 500GB 的 RAM,所以这不会是个问题。
【问题讨论】:
-
无法理解该部分 -
does not seem to terminate for this big N。澄清一下? -
为什么是布尔数组但不设置数据类型?并检查您的内存是否足够。否则垃圾会减慢每一种方法。
-
一旦内存耗尽,机器会变慢吗?
-
@Serge 但是为什么呢?我的意思是:我在第 3 行创建 NxN 数组 - 所以内存没有理由耗尽。此外,内存真的没问题,因为机器里有很多 - 大约 0.5 TB。
-
@FlashTek:在您写入之前,您的操作系统实际上不会将 RAM 提交给该分配。