【发布时间】:2017-02-09 15:06:44
【问题描述】:
我需要计算 100 万*100 万次计算来填充稀疏矩阵。但是当我使用循环逐行填充矩阵时,我发现只需 100*100 次计算就需要 6 分钟。所以任务无法解决。有什么方法可以加快进程吗?
import numpy as np
from scipy.sparse import lil_matrix
import pandas as pd
tp = pd.read_csv('F:\\SogouDownload\\train.csv', iterator=True, chunksize=1000)
data = pd.concat(tp, ignore_index=True)
matrix=lil_matrix((1862220,1862220))
for i in range(1,1862220):
for j in range(1,1862220):
matrix[i-1,j-1]=np.sum(data[data['source_node']==i].destination_node.isin(data[data['source_node']==j].destination_node))
【问题讨论】:
-
向我们展示您的代码将是一个好的开始。并且 10^12 的计算无条件地太高了。
-
你的矩阵有多稀疏?通常一种使用字典的方法,其中键是矩阵坐标工作。
-
这是 Python 2 还是 3?如果是 2,您应该使用
xrange而不是range。 -
好吧,你可以从计算外循环中的表达式
data[data['source_node']==i开始。 -
这看起来像是稀疏矩阵乘法的工作,不是单独计算 3.5 万亿个大部分为零的矩阵条目。
标签: python numpy scipy sparse-matrix