我在自己的文件MTG.py中定义了以下函数。它应该将邻接矩阵作为输入,并创建一个图。功能在命令行上运行,但不在脚本中
import pygraphviz as pgv
import numpy as np
def matrix_to_graph(M):
A = pgv.AGraph()
for i in range(0, np.shape(M)[0]):
for j in range(0, np.shape(M)[0]):
if i < j and M[i][j] == 1:
A.add_edge(i,j)
A.write('M.dot')
C = pgv.AGraph('M.dot')
C.layout()
C.draw('M.png')
当我在命令行
from MTG import matrix_to_graph
M = [[0, 1, 0, 1, 1], [1, 0, 1, 1, 0], [0, 1, 0, 0, 0], [1, 1, 0, 0, 1], [1, 0, 0, 1, 0]]
matrix_to_graph(M)
我得到我想要的东西,这是正确的图形打印到M.png运行。
但是,如果我添加到上面的代码(没有缩进,即函数的定义之外)
M = input("Enter an adjacency matrix:")
matrix_to_graph(M)
我得到的错误
for i in range(0, np.shape(M)[0]):
IndexError: tuple index out of range
我想这种情况正在发生,因为输入函数取什么我认为是一个矩阵,但是实际上是别的东西。我试图通过使用np.matrix(M)来解决这个问题,但是这使我的矩阵变成了1x16的向量。我对Python很陌生,我确信有1000种方法可以更好地实现这一目标,但我真的很想弄清楚为什么这种方式不起作用。
我使用的是PyCharm 2017.1.3(社区版,如果有的话)和Python 3.6。
我很高兴我知道问题来自哪里,更快乐的是,解决方案非常简单。谢谢。 – Trevor