Python NumPy - эффективное создание плотной матрицы - PullRequest
2 голосов
/ 31 августа 2011

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

Но он работал почти в два раза медленнее

Большое спасибо,

1 Ответ

0 голосов
/ 31 августа 2011

Должно быть возможно сделать это за один цикл, как это:

    #Generated the matrix
    for i in xrange(10):
        #Assign the time factor for each O-D pair
        I = PythonMatrixGroups[i]
        data[I] = lines[i]

Но я не проверял это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...