我目前正在编写基于运输包输入文件生成矩阵的函数。它是一个1850x1850矩阵,代表网络中的区域。这些1850个区域也被划分为10个不同的区域组。基本上我需要为每个组合原点区域分配一个时间因子(数字)到目标区域。
我的主循环是:
for i,start in enumerate(starts):
#Create the matrix
mat,data = creatematrix(ID) #1850x1850
#Read in the time factors
lines = picklines(range(start+1,starts+21))
lines = [lines[i]+lines[i+1] for i in range(0,len(lines),2)]
lines = [[float(v) for v in line] for line in lines]
#Now Lines contains the time periods for each combination of origin to destination zone
#Generated the matrix
for i in xrange(10):
for j in xrange(10):
#Assign the time factor for each O-D pair
I,J = PythonMatrixGroups[i,j]
data[I,J] = lines[i,j]
#Save matrix
mat.raw_data = data
当然,大部分时间都用在双循环中。这是生成这种密集矩阵的最快方法吗?我也试过这个方法:
PQ = PythonMatrixGroups
output = np.sum([coo_matrix((lines[i,j]*ones(len(PQ[i][j][0])), PQ),shape=((1850,1850))])
mat.raw_data = output.toarray()
但它的速度差不多是两倍
非常感谢,
答案 0 :(得分:0)
应该可以在一个循环中执行此操作:
#Generated the matrix
for i in xrange(10):
#Assign the time factor for each O-D pair
I = PythonMatrixGroups[i]
data[I] = lines[i]
但我没有测试过这个。