List 根据元素的坐标,从列表列表创建邻接矩阵

List 根据元素的坐标,从列表列表创建邻接矩阵,list,adjacency-matrix,List,Adjacency Matrix,我有一个列表,比如:MyList=[['a',B',D'],['a',B',C'],['C',D'],['a',C'] 我想创建一个对称矩阵,其中它的(I,j)-th元素是“I”和“j”元素在“MyList”的任何子列表中同时出现的次数。例如,“A”和“B”同时出现在“MyList”中的两个列表(第一个和第二个)中。所以,这意味着MyAdj['A','B']=MyAdj['B','A']=2。任何帮助或重定向到类似问题将不胜感激 这里,“i”和“j”不一定是元素(“A”或“B”),而只是与“My

我有一个列表,比如:MyList=[['a',B',D'],['a',B',C'],['C',D'],['a',C']

我想创建一个对称矩阵,其中它的(I,j)-th元素是“I”和“j”元素在“MyList”的任何子列表中同时出现的次数。例如,“A”和“B”同时出现在“MyList”中的两个列表(第一个和第二个)中。所以,这意味着MyAdj['A','B']=MyAdj['B','A']=2。任何帮助或重定向到类似问题将不胜感激


这里,“i”和“j”不一定是元素(“A”或“B”),而只是与“MyList”中整个列表集合中的每个元素相关的唯一数字(例如0和1)。因此,对于上面的“MyList”示例,这意味着MyAdj将是一个4x4矩阵。

我想您必须首先找到要搜索的唯一元素的数量并对它们进行排序(这将是您的矩阵形状)。然后,对于每个i,j,检查它们在MyList的每个列表上同时出现的次数。下面是python3中的示例:

import numpy as np

my_list = [['A', 'B', 'D'], ['A', 'B', 'C'], ['C', 'D'], ['A', 'C']]
unique_elem = sorted(set(sum(my_list, []))) # sorted list of unique elements
n = len(unique_elem)
my_adj = np.zeros((n,n), dtype= int) # matrix (n,n)

for i, a in enumerate(unique_elem):
    for j, b in enumerate(unique_elem):
        my_adj[i][j] = sum([True for seq in my_list if a in seq and b in seq])
其中my_adj输出:

   A B C D
A[[3 2 2 1]
B [2 2 1 1]
C [2 1 3 1]
D [1 1 1 2]]