gpt4 book ai didi

python - 从文本文件到市场矩阵格式

转载 作者:太空宇宙 更新时间:2023-11-03 13:02:01 24 4
gpt4 key购买 nike

我在 Python 中工作,我有一个存储在文本文件中的矩阵。文本文件以这样的格式排列:

row_id, col_id
row_id, col_id
...
row_id, col_id

row_id 和 col_id 是整数,它们取值从 0 到 n(为了知道 row_id 和 col_id 的 n,我必须先扫描整个文件)。

文件中没有header,row_ids 和col_ids 出现了多次,但是每个组合row_id,col_id 出现了一次。每个组合 row_id,col_id 没有明确的值,实际上每个单元格的值都是 1。该文件的大小将近 1 GB。

不幸的是文件在内存中难以处理,实际上它是26622704个元素的2257205 row_ids和122905 col_ids。所以我一直在寻找更好的方法来处理它。矩阵市场格式可能是一种应对方式。

是否有一种使用 Python 将此文件转换为市场矩阵格式 (http://math.nist.gov/MatrixMarket/formats.html#mtx) 文件的快速且节省内存的方法?

最佳答案

有一种处理此类矩阵的快速且内存高效的方法:使用 sparse matrices offered by 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

(或者,在一行而不是两行中:result[map(int, line.split(',', 1))] = 1)。

传递给 split() 的参数 1 只是为了在解析坐标时加快速度:它指示 Python 在第一个(和只有)找到逗号。这可能很重要,因为您正在读取一个 1 GB 的文件。

根据您的需要,您可能会找到 the other six sparse matrix representations 之一SciPy 提供的更适合。

如果您想要一个更快但也更耗内存的数组,您可以改用 result = numpy.array(...)(使用 NumPy)。

关于python - 从文本文件到市场矩阵格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17121353/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com