Luc*_*ron 3 python matrix sparse-matrix
我在Python工作,我有一个存储在文本文件中的矩阵.文本文件以这样的格式排列:
row_id,col_id
row_id,col_id
...
row_id,col_id
row_id和col_id是整数,它们取值从0到n(为了知道n为row_id和col_id,我必须先扫描整个文件).
没有标题,row_ids和col_ids在文件中多次出现,但每个组合row_id,col_id出现一次.每个组合row_id,col_id没有明确的值,实际上每个单元格值为1.文件的大小几乎是1千兆字节.
不幸的是,文件很难在内存中处理,事实上,它是2257205 row_ids和122905 col_ids用于26622704元素.所以我一直在寻找更好的方法来处理它.矩阵市场格式可能是一种处理它的方式.
有没有一种快速且内存有效的方法使用Python 将此文件转换为市场矩阵格式(http://math.nist.gov/MatrixMarket/formats.html#mtx)的文件?
有一种处理这种矩阵的快速且内存有效的方法:使用SciPy提供的稀疏矩阵(这是Python中事实上的标准,用于此类事情).
对于大小的矩阵N由N:
from scipy.sparse import lil_matrix
result = lil_matrix((N, N)) # In order to save memory, one may add: dtype=bool, or dtype=numpy.int8
with open('matrix.csv') as input_file:
for line in input_file:
x, y = map(int, line.split(',', 1)) # The "1" is only here to speed the splitting up
result[x, y] = 1
Run Code Online (Sandbox Code Playgroud)
(或者,在一行而不是两行:) result[map(int, line.split(',', 1))] = 1.
1给出的参数split()就是在解析坐标时加快速度:它指示Python在找到第一个(也是唯一的)逗号时停止解析该行.这可能很重要,因为您正在读取1 GB文件.
根据您的需要,您可能会发现SciPy提供的其他六种稀疏矩阵表示中的一种更适合.
如果您想要更快但也更耗费内存的阵列,则可以使用result = numpy.array(…)(使用NumPy).
| 归档时间: |
|
| 查看次数: |
2621 次 |
| 最近记录: |