【问题标题】:Create adjacency matrix for large id numbers为大 id 数创建邻接矩阵
【发布时间】:2020-12-20 20:13:52
【问题描述】:

我从Openstreetmap中提取了一些道路数据,十字路口之间的关系用node表示,每个node都有一个id,提取的数据已经转换为形状为(50,2)的数据框因为我试图在小块土地上实施

数据框是这样的

    id_1        id_2
0     42807002  8219742091
1   8219742091  8219737904
2   8219737904    42807004
3     42839143  8219742075
4   8219742075    42807002
5     42807002    42839146
6     42839146    42839155
7     42839155    42839161
8     42839161    42839168
9     42839168  2875111804
10  2875111804    42839172
11    42839146  8219742083
12  8219742083  8219742024
13  8219742024    42845825
14    42839161  8219742048
15  8219742048  8219742063
16  8219742063    42862789
17    42839155  8219742066
18  8219742066  5427796641
19  5427796641  5427796639
20  5427796639  5427796630 

为了进一步说明,这是我的节点之间的关系图。

每条记录都表明id_1和id_2之间存在联系。

我想为这个数据框创建一个adjacency matrix,但我有一个很大的问题是 id 名称太大(最大值是 8219742092)。我尝试使用 networkx 使用此代码

G = nx.from_pandas_adjacency(df)

但正如我预期的那样,它不起作用,因为 networkx adjacency 需要从 0 到 8219742092 的节点,并且数字 8219742092 非常大,无法从中创建数据集。

如何根据这些数据制作邻接矩阵?

小记:我不能重命名id。

【问题讨论】:

  • 本质上,你的图是一个稀疏图,创建邻接矩阵从来都不是稀疏图的好解决方案,你必须尝试使用​​其他解决方案,例如邻接表或边表等。否则,您可以创建一个字典,将您的节点 ID 映射到小的映射 ID,然后使用您的映射 ID。这是一种解决方法,我也在解决我的一个问题。我希望这对你也有帮助。
  • 谢谢你帮了我很多

标签: python networkx openstreetmap adjacency-matrix


【解决方案1】:

尝试使用交叉表使用此代码

cross = pd.crosstab(df['id_1'],df['id_2'])
adjacency_matrix=cross.values

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多