擅长:python、mysql、java
<p>1000万个双精度浮点占用80MB内存。如果以<a href="http://en.wikipedia.org/wiki/Sparse_matrix#Compressed_sparse_row_.28CSR_or_CRS.29" rel="nofollow">CSR or CSC</a>格式将它们存储在一个100万×100万的稀疏矩阵中,则需要额外的1100万个int32,总共大约125mb。这可能不到系统中物理内存的7%。根据我的经验,在一个运行32位版本python的4GB系统上,在分配数组时很少会遇到问题,除非您尝试获得10倍的内存。在</p>
<p>在计算机上运行以下代码:</p>
<pre><code>for j in itertools.count(100) :
try :
a = np.empty((j * 10**6,), dtype='uint8`)
print 'Allocated {0} MB of memory!'.format(j)
del a
except MemoryError:
print 'Failed to allocate {0} MB of memory!'.format(j)
break
</code></pre>
<p>除非它不能让你至少得到上面计算的4倍的数量,否则不要犹豫使用<code>scipy.sparse</code>格式将整个内容粘贴到内存中。在</p>
<p>我对pytables没有经验,对numpy的<code>memmap</code>数组也没有太多的经验。但在我看来,其中任何一个都会涉及到你编写处理稀疏性的逻辑,除非不可能,否则我会尽量避免这种情况。在</p>