繁体   English   中英

将非方形邻接矩阵导入Networkx python

[英]Importing non-square adjacency matrix into Networkx python

我在下面的 Pandas 数据框中有一些数据,其中列代表离散技能,行代表离散工作。 仅当工作需要技能时才会出现 1,否则为 0。

     skill_1, skill_2,
job_1      1,       0,       
job_2      0,       0,       
job_3      1,       1,       

我想使用 networkx 创建一个图表来可视化工作和技能之间的这种关系。 我尝试了两种方法,一种在数据帧本身上, nx.from_pandas_adjacencynx.from_numpy_matrix 后一种方法应用于数据框的 numpy 表示,其中删除了列名和行名。

在任何一种情况下,都会引发错误,因为这是一个 non_square 矩阵。 这是有道理的,因为 networkx 可能将列和行都解释为同一组节点。 但是,列和节点在这里代表明显不同的事物。 两个工作通过他们共享的技能相关联,两个技能通过他们共享的工作相关联,但任何两种技能或任何两个工作之间没有直接的优势。

鉴于我的行和列是不同的节点集,如何将我的数据导入 networkx?

我在下面的熊猫数据框中有一些数据,其中列代表离散技能,行代表离散工作。 仅当工作需要技能时才会出现 1,否则为 0。

     skill_1, skill_2,
job_1      1,       0,       
job_2      0,       0,       
job_3      1,       1,       

我想使用 networkx 创建一个图表来可视化工作和技能之间的这种关系。 我尝试了两种方法,一种在数据帧本身上, nx.from_pandas_adjacencynx.from_numpy_matrix 后一种方法应用于数据框的 numpy 表示,其中删除了列名和行名。

在任何一种情况下,都会引发错误,因为这是一个 non_square 矩阵。 这是有道理的,因为 networkx 可能将列和行都解释为同一组节点。 但是,列和节点在这里代表明显不同的事物。 两个工作通过他们共享的技能相关联,两个技能通过他们共享的工作相关联,但任何两个技能或任何两个工作之间没有直接的优势。

鉴于我的行和列是不同的节点集,如何将我的数据导入 networkx?

我在下面的熊猫数据框中有一些数据,其中列代表离散技能,行代表离散工作。 仅当工作需要技能时才会出现 1,否则为 0。

     skill_1, skill_2,
job_1      1,       0,       
job_2      0,       0,       
job_3      1,       1,       

我想使用 networkx 创建一个图表来可视化工作和技能之间的这种关系。 我尝试了两种方法,一种在数据帧本身上, nx.from_pandas_adjacencynx.from_numpy_matrix 后一种方法应用于数据框的 numpy 表示,其中删除了列名和行名。

在任何一种情况下,都会引发错误,因为这是一个 non_square 矩阵。 这是有道理的,因为 networkx 可能将列和行都解释为同一组节点。 但是,列和节点在这里代表明显不同的事物。 两个工作通过他们共享的技能相关联,两个技能通过他们共享的工作相关联,但任何两个技能或任何两个工作之间没有直接的优势。

鉴于我的行和列是不同的节点集,如何将我的数据导入 networkx?

正如 ComplexGates 所提到的,这里有一个双向矩阵。 我看到你已经添加了一个解决方案,你用零填充矩阵的其余部分以使其成为正方形。 但是,我怀疑您真正想要的是如何将双邻接矩阵转换为(方形)邻接矩阵,这与发布的解决方案不同。

对于具有 m 行和 n 列的双邻接矩阵 A,您可以将其转换为大小为 (m+n)x(m+n) 的邻接矩阵,如下所示:

┏           ┓
┃0_nxn A^T  ┃
┃A_mxn 0_mxm┃
┗           ┛

换句话说,将 A 放在 (m+n)x(m+n) 矩阵的左下角,将 A 的转置放在右上角,并用零填充剩余空间。

在代码中,如果 A 是一个 2D Numpy 数组,您可能会执行以下操作:

def bipartite_to_adjacency(A):
     m, n = A.shape
     Z_mm = np.zeros((m,m), dtype=int)
     Z_nn = np.zeros((n,n), dtype=int)
     top_partition = np.concatenate((Z_nn,np.transpose(A)), axis=1)
     bottom_partition = np.concatenate((A,Z_mm), axis=1)
     return np.concatenate((top_partition, bottom_partition))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM