我在自己的文件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