为什么我可以创建一个(显然)比我的计算机内存大的numpy数组?

时间:2016-10-18 03:59:40

标签: python numpy memory scipy sparse-matrix

当我运行以下代码时:

/sbconsole/

我得到的输出为80000000000字节= 80 GB。然而,我使用的Macbook Air只有4 GB的RAM。有人可以解释我(显然)创建一个大于我的内存大小的NumPy数组吗? import scipy.sparse x = scipy.sparse.random(100000, 100000, 1e-4) y = x.toarray() print(y.nbytes) 以某种方式是y的视图,而不是副本吗?我在x文档中没有找到任何相关内容。不出所料,如果我做scipy.sparse之类的事情,我会崩溃Python ......我不能指望对10 ^ 10大小的数组做些什么。谢谢!

版本: Python 3.5.2通过Anaconda 4.1.1,SciPy 0.17.1,NumPy 1.11.1。

1 个答案:

答案 0 :(得分:0)

这是因为numpy实际上没有分配所有空间。很可能稀疏数组和矩阵用triplets, linked nodes或其他一些忽略之间所有空白空间的方法表示。字节是根据矩阵/数组的指定维度计算的,而不是内存中的实际数据。