从数组及其转置创建邻接矩阵
Create adjacency matrix from array and its transpose
我有一个这样的 pandas DataFrame:
我想创建一个这样的对称矩阵:
其中的值实际上是两个列表的交集长度。因此我做了这个功能:
def intersectSize(l1, l2):
return len(set(l1) & set(l2))
有没有类似这个的函数:
def createSymMatrix(array, func):
...
return matrix
其中 array
是我的初始数据框,func
是 intersectSize
函数?
编辑: 用这两个衬垫解决了这个问题:
array = [[len(set(l1)&set(l2)) for l1 in df]] for l2 in df]
adj = pd.DataFrame(data=array, index=df.index, columns=df.index)
我想你需要这个,
r=[]
for val in list(itertools.product(df[0].values,df[0].values)):
r.append( len(set(val[0])&set(val[1])) )
print pd.DataFrame(np.array(r).reshape(len(df),-1))
使用列表理解:
t= [len(set(val[0])&set(val[1])) for val in list(itertools.product(df[0].values,df[0].values))]
print pd.DataFrame(np.array(t).reshape(len(df),-1))
输出:
0 1 2 3
0 3 0 0 1
1 0 1 0 1
2 0 0 2 0
3 1 1 0 2
我有一个这样的 pandas DataFrame:
我想创建一个这样的对称矩阵:
其中的值实际上是两个列表的交集长度。因此我做了这个功能:
def intersectSize(l1, l2):
return len(set(l1) & set(l2))
有没有类似这个的函数:
def createSymMatrix(array, func):
...
return matrix
其中 array
是我的初始数据框,func
是 intersectSize
函数?
编辑: 用这两个衬垫解决了这个问题:
array = [[len(set(l1)&set(l2)) for l1 in df]] for l2 in df]
adj = pd.DataFrame(data=array, index=df.index, columns=df.index)
我想你需要这个,
r=[]
for val in list(itertools.product(df[0].values,df[0].values)):
r.append( len(set(val[0])&set(val[1])) )
print pd.DataFrame(np.array(r).reshape(len(df),-1))
使用列表理解:
t= [len(set(val[0])&set(val[1])) for val in list(itertools.product(df[0].values,df[0].values))]
print pd.DataFrame(np.array(t).reshape(len(df),-1))
输出:
0 1 2 3
0 3 0 0 1
1 0 1 0 1
2 0 0 2 0
3 1 1 0 2