【问题标题】:Adding two matrices and maintain the structure添加两个矩阵并保持结构
【发布时间】:2020-12-11 10:06:11
【问题描述】:

我想以邻接矩阵的形式添加/合并两个图并处理结构。

第一张图是这样的:

相关的邻接矩阵为:

 0. 1. 1. 1.
 1. 0. 1. 1.
 1. 1. 0. 1.
 1. 1. 1. 0.

第二张图是这样的:

相关的邻接矩阵为:

[[0. 1. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [1. 0. 1. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 1. 0. 1. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 1. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
 [1. 0. 0. 0. 0. 1. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0.]
 [0. 1. 0. 0. 1. 0. 1. 0. 0. 1. 0. 0. 0. 0. 0. 0.]
 [0. 0. 1. 0. 0. 1. 0. 1. 0. 0. 1. 0. 0. 0. 0. 0.]
 [0. 0. 0. 1. 0. 0. 1. 0. 0. 0. 0. 1. 0. 0. 0. 0.]
 [0. 0. 0. 0. 1. 0. 0. 0. 0. 1. 0. 0. 1. 0. 0. 0.]
 [0. 0. 0. 0. 0. 1. 0. 0. 1. 0. 1. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 0. 1. 0. 0. 1. 0. 1. 0. 0. 1. 0.]
 [0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 1. 0. 0. 0. 0. 1.] 
 [0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 1. 0. 1. 0.] 
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 1. 0. 1.] 
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 1. 0.]]

现在我想,我可以填充第一个矩阵并将第一个矩阵添加到第二个矩阵。但结果不是我想要的。

所以我的问题是,如何合并/添加两个邻接矩阵并注意/维护它们的结构...?

我想要的结果应该是这样的:

任何想法都会有所帮助:)。

【问题讨论】:

  • 您的第一个图有 4 个顶点,但您显示的矩阵是 3x4,而不是 4x4。第二张图有 16 个顶点,但您显示的矩阵是 15x16,而不是 16x16。也许你错过了一行?
  • 对不起,这是我的错误......我忘了划线:)。这并不能解决问题:)
  • “现在我想,我可以填充第一个矩阵并将第一个矩阵简单地添加到第二个矩阵。但结果不是我想要的。”为什么?结果有什么问题?请注意,如果您将顶点的索引写在图形的绘图上会很有帮助,因此我们可以看到矩阵的哪一行和哪一列对应于绘图中的哪个顶点。
  • 嗨 - 欢迎来到 stackoverflow。不幸的是,目前尚不清楚您期望的结果。如果您能提供,我想我们可以提供更多帮助。

标签: python-3.x graph networkx graph-theory adjacency-matrix


【解决方案1】:

我认为这就是你可能追求的那种东西。诀窍是使用nx.compose 将两个图合并在一起。

设置第一个图表:

import networkx as nx

adjmat1 = np.array([[0., 1., 1., 1.],
                      [1., 0., 1., 1.],
                      [1., 1., 0., 1.],
                      [1., 1., 1., 0.]])

adjmat1_df = pd.DataFrame(adjmat1)
node_labels = [(1,1),(1,2),(2,1),(2,2)]
adjmat1_df.columns = node_labels
adjmat1_df.index = node_labels

G1 = nx.from_pandas_adjacency(adjmat1_df)

pos = {(x,y):(y,-x) for x,y in G1.nodes()}
nx.draw(G1, pos=pos, 
        node_color='lightgreen', 
        with_labels=True,
        node_size=600)

设置第二个图表(我已经进行了快速网格设置,但您可以使用第二个邻接矩阵来创建一个图表,如第一步):

# Following @yatu's SO answer for plotting https://stackoverflow.com/a/62161953/6386471

G2 = nx.grid_2d_graph(4,4)
plt.figure(figsize=(4,4))
pos = {(x,y):(y,-x) for x,y in G2.nodes()}
nx.draw(G2, pos=pos, 
        node_color='lightgreen', 
        with_labels=True,
        node_size=600)

使用nx.compose 组合图形:

H = nx.compose(G1,G2)
pos = {(x,y):(y,-x) for x,y in H.nodes()}
nx.draw(H, pos=pos, 
        node_color='lightgreen', 
        with_labels=True,
        node_size=600)

【讨论】:

  • 非常感谢!我的问题是,我忘了给图表提供正确的 node_labels 和 indices :)
猜你喜欢
  • 2016-09-22
  • 1970-01-01
  • 2019-09-08
  • 2017-05-16
  • 1970-01-01
  • 2014-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多