我的问题是,我需要从一个以特定格式保存的文件中读取大约50M行的文本。
x1 "\t" x2 "\t" .. x10 "\t" count
然后计算矩阵A,其中组成部分为A[j][i] = 所有行的计数 * x_i * x_j之和。
我尝试了两种方法,都是逐行读取文件:
1)将A保持为Python矩阵并在for循环中更新:
for j in range(size):
for i in range(size):
A[j][i] += x[j] * x[i] * count
2) 将A转换为numpy数组,并使用numpy.add进行更新:
numpy.add(A, count * numpy.outer(x, x))
令我惊讶的是,第二种方法比第一种慢了约30%。而且两种方法都非常缓慢 - 整个文件需要大约10分钟... 是否有办法加快矩阵的计算速度?也许有一些函数可以从文件中完全读取数据(或大块读取),而不是逐行读取?有什么建议吗?
i
的范围之前延迟乘以count
,因为a1*c + a2*c + ... + an*c = (a1 + a2 + ... + an) * c
。 - undefinedsize
的值是10,也就是说A
是一个10x10的矩阵,并且您要对这些操作重复执行5000万次?能否展示完整的代码? - undefined.npy
格式的文件?当然,这只有在您多次读取同一个文件而不是每次读取不同文件时才可能。 - undefined