python - 使用 Python 从大型文本文件到稀疏矩阵

标签 python text sparse-matrix

我正在尝试找到一种有效的方法来读取非常大的文本文件(大约 2,000,000 行)。这些行中大约 90%(实际上是最后 90%)具有三列格式,用于存储稀疏矩阵。

这是我做的。首先,我处理文件的前 10%:

i=1
cpt=0
skip=0
finnum=0
indice=1 
vec=[]
mat=[]
for line in fileinput.input("MY_TEXT_FILE.TXT"):
if i==1:
    # skipping the first line
    skip = 1
if (finnum == 0)and(skip==0):
    # special reading operation for the first 10% (approximately)
    tline=shlex.split(line)
    ind_loc=0
    while ind_loc<len(tline):
    if (int(tline[ind_loc])!=0):
            vec.append(int(tline[ind_loc]))
        ind_loc=ind_loc+1   
if (finnum == 1)and(skip==0):
    print('finnum = 1')
    h=input()    
        break       
    if (' 0' in line):
    finnum = 1
if skip == 0:
    i=i+1
else:
    skip=0
    i=i+1
cpt=cpt+1

然后我将剩余的 90% 提取到一个列表中:

matrix=[]
with open('MY_TEXT_FILE.TXT') as f:
for i in range(cpt):
    f.next()
for line in f:
    matrix.append(line)

这允许以低内存消耗非常快速地读取文本文件。缺点是 ma​​trix 是一个字符串列表,每个字符串类似于:

>>> matrix[23]
'           5          11  8.320234929063493E-008\n'

我尝试在 ma​​trix 的行上使用迭代过程并结合 shlex.split 命令从字符串列表转到数组,但这是非常耗时。

您知道从字符串列表到数组的快速策略吗?

我想知道是否有比这个过程更快的东西:

A=[0]*len(matrix)
B=[0]*len(matrix)
C=[0]*len(matrix)
for i in range(len(matrix)):
     line = shlex.split(matrix[i])
     A[i]=float(line[0])
     B[i]=float(line[1])
     C[i]=float(line[2])

阿兰

最佳答案

看,我想出了这个似乎工作得更快的混合解决方案。我创建了一个 100 万样本随机数据,就像您上面提到的那样,并为您的代码计时。顺便说一句,我的 Mac 电脑用了 77 秒,这是一台超快的电脑。 使用 numpy 而不是 shlex 来拆分字符串在 5 秒的处理过程中结束。

A=[0]*len(matrix)
B=[0]*len(matrix)
C=[0]*len(matrix)
for i in range(len(matrix)):
    full_array = np.fromstring(matrix[i], dtype=float, sep=" ")
    A[i]=full_array[0]
    B[i]=full_array[1]
    C[i]=full_array[2]

我进行了几次测试,它似乎运行良好,而且速度提高了 14 倍。 希望对您有所帮助。

关于python - 使用 Python 从大型文本文件到稀疏矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22839386/

相关文章:

python - 如何将现有模型与 Django 中的用户模型链接

python - 使用 PIL 在 python 中旋转并将扩展参数设置为 true 时指定图像填充颜色

r - 未识别的空白

R:将文本添加到绘图区域外右下角的绘图中

c++ - Eigen 中的稀疏矩阵和 vector 加法广播

neural-network - 使用 SparseTensor 作为可训练变量?

python - 安装错误 : Do you have azure>=2. 0.0?

python - 我可以在同一台 Windows 计算机上安装 Python 3.x 和 2.x 吗?

java - 如何创建一个简单的段落类

python - 如何测试两个稀疏数组是否(几乎)相等?