python两列数据⽣成邻接矩阵_从csv数据集创建python中的邻
接矩阵
这是⼀个解决⽅案.它不直接为您提供所请求的邻接矩阵,⽽是为您提供⾃⼰创建它所需的内容.
#assume you stored every line of your input as a tuples (eventid, mnbr).
observations = [(20, 1), (26, 1), (12, 2), (14, 2), (15,3 ), (14, 3), (10, 3)]
#then creates an event link dictionary. i.e something that link every event to all its mnbrs
eventLinks = {}
for (eventid, mnbr) in observations :
#If this event have never been encoutered then create a new entry in links
if not eventid in eventLinks.keys():
eventLinks[eventid] = []
eventLinks[eventid].append(mnbr)
#collect the mnbrs
mnbrs = set([mnbr for (eventid, mnbr) in observations])
#create a member link dictionary. This one link a mnbr to other mnbr linked to it.
mnbrLinks = { mnbr : set() for mnbr in mnbrs }
for mnbrList in eventLinks.values() :
#add for each mnbr all the mnbr implied in the same event.
for mnbr in mnbrList:
mnbrLinks[mnbr] = mnbrLinks[mnbr].union(set(mnbrList))
print(mnbrLinks)
执⾏此代码会产⽣以下结果:
{1: {1}, 2: {2, 3}, 3: {2, 3}}
这是⼀个字典,其中每个mnbr都有⼀组相关的邻接mnbrs.这实际上是⼀个邻接列表,它是⼀个压缩的邻接矩阵.您可以使⽤字典键和值作为⾏和列索引来扩展它并构建您请求的矩阵.
希望它有所帮助.
亚瑟.
编辑2:添加代码以将adjacencyList转换为⼀个⼩的智能adjacencyMatrix
adjacencyList = {1: {1}, 2: {2, 3}, 3: {2, 3}}
class AdjacencyMatrix():
def __init__(self, adjacencyList, label = ""):
"""
Instanciation method of the class.
Create an adjacency matrix from an adjacencyList.
It is supposed that graph vertices are labeled with numbers from 1 to n. """
self.matrix = []
self.label = label
#create an empty matrix
for i in range(len(adjacencyList.keys())):
self.matrix.append( [0]*(len(adjacencyList.keys())) )
for key in adjacencyList.keys():
for value in adjacencyList[key]:
self[key-1][value-1] = 1
def __str__(self):
# return self.__repr__() is another possibility that just print the list of list
# see python doc about difference between __str__ and __repr__
#label first line
string = self.label + "\t"
for i in range(len(self.matrix)):
string += str(i+1) + "\t"
string += "\n"
#for each matrix line :
for row in range(len(self.matrix)):
string += str(row+1) + "\t"
for column in range(len(self.matrix)):
string += str(self[row][column]) + "\t"
string += "\n"
return string
python怎么读csv数据def __repr__(self):
return str(self.matrix)
def __getitem__(self, index):
""" Allow to access matrix element using matrix[index][index] syntax """ return self.matrix.__getitem__(index)
def __setitem__(self, index, item):
""" Allow to set matrix element using matrix[index][index] = value syntax """ return self.matrix.__setitem__(index, item)
def areAdjacent(self, i, j):
return self[i-1][j-1] == 1
m = AdjacencyMatrix(adjacencyList, label="mbr") print(m)
print("m.areAdjacent(1,2) :",m.areAdjacent(1,2)) print("m.areAdjacent(2,3) :",m.areAdjacent(2,3))此代码提供以下结果:
mbr 1 2 3
1 1 0 0
2 0 1 1
3 0 1 1
m.areAdjacent(1,2) : False
m.areAdjacent(2,3) : True

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。