Python numpy阵列中有多少内存?RAM是一个限制因素吗?
我正在使用numpy创建一个边长为100的立方体数组,因此总共包含100万个条目。对于一百万个条目中的每一个,我插入一个100x100矩阵,其条目由随机生成的数字组成。我正在使用以下代码执行此操作:Python numpy阵列中有多少内存?RAM是一个限制因素吗?,python,arrays,memory,numpy,Python,Arrays,Memory,Numpy,我正在使用numpy创建一个边长为100的立方体数组,因此总共包含100万个条目。对于一百万个条目中的每一个,我插入一个100x100矩阵,其条目由随机生成的数字组成。我正在使用以下代码执行此操作: import random from numpy import * cube = arange(1000000).reshape(100,100,100) for element in cube.flat: matrix = arange(10000).reshape(100,100)
import random
from numpy import *
cube = arange(1000000).reshape(100,100,100)
for element in cube.flat:
matrix = arange(10000).reshape(100,100)
for entry in matrix.flat:
entry = random.random()*100
element = matrix
我原以为这需要一段时间,但由于生成了100亿个随机数,我甚至不确定我的计算机是否能处理它。这样的阵列会占用多少内存?RAM是否会成为一个限制因素,即如果我的计算机没有足够的RAM,它是否会无法实际生成阵列
另外,如果有更有效的方法来实现此代码,我将非常感谢提示:)几点:
- numpy阵列的内存大小易于计算。它只是元素数乘以数据大小,再加上一小部分固定开销。例如,如果您的
是cube.dtype
,并且它有1000000个元素,则需要int64
字节(8Mb)1000000*64/8=8000000
- 然而,正如@Gabe所指出的,100*100*1000000双打将需要大约20分钟
- 这本身不会导致任何“中断”,但操作速度会慢得离谱,因为您的计算机需要执行所有操作
- 您的循环不会达到预期效果。
将简单地覆盖element=matrix
变量,而不是替换元素
,使多维数据集中的元素
多维数据集保持不变。这同样适用于
条目=random.rand()*100
- 相反,请参见:
import numpy as np
matrix = np.random.random((100,100))*100
假设
double
精度为8字节,如果您真的要存储100亿字节,则为80GB。如果你不得不问,你的电脑没有足够的内存。这就是说,看起来你正在创建它们,但没有存储它们,所以你应该没事。如果你超过了可用虚拟内存的总量,事情确实会“崩溃”,在这种情况下,这似乎很有可能,因为没有多少人的交换空间大于80GB。在处理np.zeros()之类的函数时,情况并不完全如此
。使用延迟加载(至少在Linux版本中是这样),这将避免在访问某些元素之前使用大量内存。例如,您可以使用np.zero((2400024000))
创建一个矩阵,它不会占用太多内存,但如果使用np.random.random((2400024000))
,它会占用超过4GB的内存。更好的解释: