Python - 超大矩阵的最佳数据结构
我需要创建大约200万个向量,每个向量有1000个位置(每个位置只存一个整数)。
对于处理这么多数据,最合适的数据结构是什么呢?我可能对处理和内存的需求估计得有点高。
我需要遍历一堆文件(总共大约34.5GB),每当在某一行遇到200万个项目中的一个(每个项目对应一个向量)时,就更新这些向量。
我可以很容易地写出代码来实现这个,但我知道这样做可能不够优化,无法处理这么大的数据量,所以我才来请教你们这些专家。:)
最好的,
乔治娜
3 个回答
1
使用稀疏矩阵,假设大部分的数值都是0。
1
如果你需要在内存中处理数据,可以试试 scipy.sparse 矩阵 这种类型。它里面有一些算法,可以高效地处理稀疏矩阵。
5
你可能在使用的机器上遇到了内存不足的问题。如果不清理正在运行的程序:
a = numpy.zeros((1000000,1000),dtype=int)
就会导致数据无法完全放进内存。不过,通常来说,如果你能把问题拆分开,这样就不需要一次性把整个数组都放进内存,或者你可以使用稀疏表示法,那我建议你使用 numpy
(对于稀疏表示可以用 scipy
)。
另外,你也可以考虑使用 hdf5
格式,通过 h5py
或 pytables
,或者用 netcdf4
和 netcdf4-python
来把数据存储在硬盘上,然后只访问你需要的部分。