有没有办法将对称权重矩阵转换为无向加权图而不进行循环?

时间:2017-12-05 11:16:52

标签: python python-2.7 graph networkx

从特定数据集中我获得了pandas数据帧对象,并计算了此df列之间的相关性。

下一步是从这个相关矩阵转移到加权图,其中权重取自该矩阵。

由于我有大约100个足够大的数据集,我宁愿不为此目的使用循环(或以智能方式进行)。

命令的主要问题" stack()"是图形变为有向,它包括边[(x,y):weight0]和[(y,x):weight0]。我想摆脱那些重复。到目前为止,这是我的代码:

import pandas as pd
import numpy as np
import networkx as nx



df1 = df1.corr()
links = df1.stack().reset_index()
links.columns = ['var1', 'var2','value']
links = links.loc[(links['var1'] != links['var2'])]
G = nx.from_pandas_dataframe(links, 'var1', 'var2', 'value')

1 个答案:

答案 0 :(得分:0)

您可以更直接地从相关数据框(实际上只是一个方形numpy数组,其中包含a的修剪)到networkx:

anatomical_scans=$(find "${inputpath}" -name "*mprage")

如果你想在使图形在上面两行之间插入以下代码之前使对角线为0,注意np.fill_diagonal就地工作:

correlation_matrix = df1.corr().values
G = nx.from_numpy_matrix(correlation_matrix,create_using=nx.DiGraph())