【发布时间】:2016-03-03 03:51:07
【问题描述】:
我有两个稀疏* 邻接矩阵 A1 和 A2 的 type 'numpy.int64'。
相应图的节点由整数标记,矩阵的索引对应于这些节点(矩阵值是节点之间的链接权重)。
我正在尝试计算图表之间的相似性度量。为此,我需要找到每个图的子图的邻接矩阵,其中包含两个图共有的节点。 不能保证矩阵的大小相等或它们之间的公共节点。
结果应该是相同的邻接矩阵,其节点值不在两个图中都等于 0。
例子:
A1:
array([[ 0, 1, 2, 1],
[ 1, 0, 0, 0],
[ 2, 0, 0, 0],
[ 1, 0, 0, 0]])
A2:
array([[ 0, 0, 1],
[ 0, 0, 0],
[ 1, 0, 0]])
结果:
A1':
array([[ 0, 0, 2, 0],
[ 0, 0, 0, 0],
[ 2, 0, 0, 0],
[ 0, 0, 0, 0]])
A2':
array([[ 0, 0, 1],
[ 0, 0, 0],
[ 1, 0, 0]])
我使用的矩阵大小约为 10^5 X 10^5。结果大小无关紧要,之后我会切掉最小的大小。 我将多次重复此操作,因此速度很重要。
目前的尝试:
我可以通过以下方式获取公共节点列表:
np.intersect1d(A1.nonzero()[0], A2.nonzero()[0])
但我找不到将其用作过滤器以将不在此列表中的索引的值映射到 0 的方法。
*我认为我不一定需要使用稀疏,但对于以后的可扩展性来说非常可取。
【问题讨论】: