我需要從MatLab匯出的資料中建立一個大型的加權數位圖。最終的目標是使用NNGT進行分析,但看起來使用Networkx建立它,然后轉換為NNGT可能更容易。
'sample.txt'看起來像這樣:
1,37
1,76
2,4
2,41
3,2
3,4
4,2
4,3
等等等等。所以我試著:
import networkx as nx
G=nx.DiGraph()
G=nx.read_edgelist('s sample.txt')
但這回傳一個空的圖物件(0個節點,0條邊)。
嘗試了之前由Networkx建議的答案:我如何從檔案中匯入圖? :
with open('sample.txt' ) as f:
lines = f.readlines()
myList = [line.strip().split() for line in lines]
G.add_edges_from(myList)
但得到的錯誤是:
NetworkXError: 邊緣元組['1,37']必須是2元組或3元組。
所以我試著說:
tup = tuple(myList)
G.add_edges_from(tup)
但是仍然得到了同樣的錯誤:
NetworkXError: 邊緣元組['1,76']必須是2元組或3元組。
這只是在嘗試獲取邊緣,我甚至還沒有處理權重問題。
最終,我需要能夠:
- 在 NNGT 中創建一個具有設定數量的節點的二維圖--一些節點將沒有邊,但必須仍然存在)
- 從檔案中匯入邊(即鄰接矩陣)和權重--任何可以從MatLab中匯出的檔案型別,不需要是.txt 。
有什么想法嗎?
uj5u.com熱心網友回復:
你只需要稍微調整一下read_edgelist,并使用兩個引數create_using來獲得你的DiGraph實體,并使用作為分隔符的,而不是默認的空格:
import networkx as nx
G = nx.read_edgelist('sample.txt', create_using=nx.DiGraph, delimiter=" ,", nodetype=int)
print(G.edges())
# [('1'/span>, '37'/span>), ('1'/span>, '76'/span>)。('2', '4'), ('2', '41') 。('4', '2'), ('4', '3') 。('3', '2'), ('3', '4') ]
正如Frodnar下面提到的,如果你無論如何只添加整數節點,你可以包括nodetype=int,并且你需要記住沒有邊的節點不會被添加到圖中。
uj5u.com熱心網友回復:
如果你愿意,你可以直接從matlab中讀取資料。將作業空間保存為一個.mat檔案,然后你scipy.io
。from scipy.io import loadmat
path = 'file.mat'
raw_data = loadmat(path, squeeze_me=True)
data = raw_data['data_struct']
然后將資料匯入一個資料框架,然后匯入networkx。不需要文本檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/309709.html
標籤:
