python numpy - 高效的密集矩阵创建

时间:2011-08-31 02:37:04

标签: python indexing matrix numpy

我目前正在编写基于运输包输入文件生成矩阵的函数。它是一个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 :(得分: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]

但我没有测试过这个。