我是python的新手,开始使用numpy。我遵循了论文中的一个算法,对于我的数据集,它需要一个维数为1百万*1百万的数组。在
确切的代码是larray(np.random.normal(0, sigma**2, size=(794832, 794832))
尽管我有一个16gbram,numpy在创建时尝试将数组加载到内存中,因此,我得到了memoryerror
。我尝试使用惰性初始化与lazyarray
一起使用,但仍然不起作用。在
有没有办法创建一个使用文件系统而不是ram的数组?在
提前谢谢。在
Tags:
您正在创建的数据大小将取决于矩阵大小和数据的精度类型。在
您正试图使用
np.random.normal
创建一个具有float64精度类型值的矩阵。64位表示每个数字使用64位,因此每个数字需要8字节的内存(每字节8位)。如果矩阵的形状/维数为4000x794832
,这意味着您需要~23.7GB[4000*794832*8]的内存分配。在如果你有一个16GB的内存,这应该是不够的,所以它将使用交换(如果足够定义),它可能需要一些时间来创建它,或者只是耗尽内存。在
问题是,你需要float64精度吗?因为这似乎对科学家的发展很有帮助。所以,为了加速下面的数学运算,可以考虑将矩阵精度类型改为float16,例如[4000*794832*2]。在
这个例子的问题是
np.random.normal
没有直接定义numpydtype
的选项,所以您将创建一个float64矩阵,然后对其进行转换,这不是一个非常有效的选项。但是如果没有其他选择。。。在相关问题 更多 >
编程相关推荐