Я сейчас пишу функцию для генерации матриц на основе входного файла для транспортного пакета.Это матрица 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()
Но он работал почти в два раза медленнее
Большое спасибо,