首页 > 解决方案 > 如何使用 np.triu_indices 获取一个数组的上三角值?

问题描述

大家,我的一个项目有一些问题,所以我有一个 .tsp 文件来读取并让一个 Dijkstra 算法解决,但是我的代码没有创建矩阵,有人可以帮助我。我的代码在这里。

class Matrix_Manipulation:
    def __init__(self, size):
        self.size = size
        self.elements = size**2

    def fill_matrix_upper(self, values):
        iu1 = np.triu_indices(self.elements/2, 1)
        matrix = np.zeros((self.size,self.size))
        matrix[iu1] = values
        return matrix

    def read_dist(self, tsp, tspfile):
        total = int(((tsp["DIMENSION"] + 1) ** 2) / 2)
        for n in range(1, total):
            line = tspfile.readline()
            words = deque(line.split())
            for i in words:
                if (i == "EOF"):
                    break
                else:
                    tsp["EDGE_WEIGHT_SECTION"].append(int(i))

        return tsp

    def return_list(self, tsp):
        return list(tsp["EDGE_WEIGHT_SECTION"])

当我扫描 .tsp 文件时效果很好,但是当我尝试创建矩阵时不起作用。

而且我找不到错误,因为 IDE 没有为我显示错误。

编辑


if __name__ == "__main__": 
    path = open("si535.tsp", "r") 
    r = Reader() 
    tsp = r.read_tsp_file(path) 
    tsp = r.read_dist(tsp, path) 
    l = r.return_list(tsp) 
    mat = Matrix_Manipulation(int(tsp["DIMENSION"]) + 1) 
    matrix = mat.fill_matrix_upper(l) 
    print(matrix)

标签: pythonpython-3.xnumpy

解决方案


推荐阅读