【问题标题】:Get Adjacency matrix from a Shapefile从 Shapefile 获取邻接矩阵
【发布时间】:2017-09-13 15:17:09
【问题描述】:

我有一个文件夹,其中包含有关 British Power Grid Network 的 shapefile。 我需要从 tese 文件中提取该网络的 邻接矩阵。 由于我没有使用 shapefile 的经验,因此我需要清楚地解释如何获得这样的矩阵。

邻接矩阵是指一个平方矩阵,其维数与网络节点的数量一样多,单元格中的零表示两个未连接的节点,单元格中的零表示两个连接的节点.我需要这样的矩阵,因为我想在这个网络上测试一个流行病学系统,即英国国家电网。

我尝试在 Python 上运行这段代码:

    import networkx as nx
import pickle as serializer
#from osgeo import ogr
#import gdal
#import graphviz as pgv
G=nx.read_shp('NationalGrid-ElecTrans-MT-2012_Nodes.shp')
A = nx.adjacency_matrix(G)
nx.draw(G)
#nx.average_shortest_path_length(G)
#nx.degree(G)
#nx.density(G)
#nx.betweenness_centrality(G)
with open('some_file3.txt', 'w') as f:
    serializer.dump( A, f)

但现在我不知道如何使用我正在附加的输出。 https://ufile.io/3917f

【问题讨论】:

  • 这个文件是 'some_file3.txt' 吗? “我不知道如何使用输出”是指这个文件还是 adjacency_matrix?如果您指的是文件,它并不是要使用的,而是要保存到磁盘以便以后加载。您需要运行您需要对“A”执行的任何分析。您的问题不清楚,请阅读guide lines提问。
  • 输出不是数学定义的邻接矩阵,所以我看不懂。正如你所说,它是编码的。实际上我需要在 Matlab 中导入邻接矩阵,但如果我尝试导入 .txt 文件,它不会被识别为矩阵。那么,如果我想在 Matlab 中导入这个矩阵,我该怎么办?
  • 查看答案。

标签: python matlab networkx shapefile adjacency-matrix


【解决方案1】:

nx.adj_matrix(G) 返回SciPy sparse matrix,您可能需要DataFrame 或数组。使用nx.convert.to_dict_of_dicts(G):

import pandas as pd
import networkx as nx
G = nx.Graph()
G.add_cycle([1,2,3,4,5])
G.add_cycle([33,3,34,35])
A = pd.DataFrame(nx.convert.to_dict_of_dicts(G)).fillna(0).replace([{}],1)
out: 

    1   2   3   4   5   33  34  35
1   0   1   0   0   1   0   0   0
2   1   0   1   0   0   0   0   0
3   0   1   0   1   0   1   1   0
4   0   0   1   0   1   0   0   0
5   1   0   0   1   0   0   0   0
33  0   0   1   0   0   0   0   1
34  0   0   1   0   0   0   0   1
35  0   0   0   0   0   1   1   0

或更好:

A = nx.convert_matrix.to_pandas_dataframe(K)

如果你需要numpy数组你可以通过A.values获取值,如果你需要numpy矩阵:

A = nx.convert_matrix.to_numpy_matrix(K)

【讨论】:

  • ibb.co/eOSq9Q 这是我运行命令时发生的情况。如您所见,我没有使用 python 的经验。
  • 加载 shapefile 后会得到什么?你能做 G.edges(data=true) 吗?
  • @AurelioPalacardo 顾名思义,您正在加载的 shapefile 似乎只有点 (NationalGrid-ElecTrans-MT-2012_Nodes.shp)。在这种情况下,您最终将得到一个仅包含没有任何边的节点的图!所以基本上没有什么可出口的。您应该获得正确的 shapefile,其中包含 Lines
  • 你是对的。我找到了正确的 shapefile,它有大约 2k 个节点,因此需要很长时间才能运行。
  • ibb.co/fhzbJk 我认为矩阵尺寸和内存存在一些问题。我能做什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-18
  • 2016-04-06
  • 2013-03-10
相关资源
最近更新 更多