【发布时间】:2021-04-23 13:27:53
【问题描述】:
有人可以帮助我了解如何根据所有行之间的欧几里德距离(即 0 和 1、0 和 2、.. 1 和 2、...)从 numpy 数组生成加权邻接矩阵吗?
给定以下带有输入矩阵 (5, 4) 的示例:
matrix = [[2,10,9,6],
[5,1,4,7],
[3,2,1,0],
[10, 20, 1, 4],
[17, 3, 5, 18]]
我想获得一个加权邻接矩阵(5,5),其中包含节点之间的最小距离,即
if dist(row0, row1)= 10,77 and dist(row0, row2)= 12,84,
--> the output matrix will take the first distance as a column value.
我已经用以下代码解决了生成邻接矩阵的第一部分:
from scipy.spatial.distance import cdist
dist = cdist( matrix, matrix, metric='euclidean')
我得到以下结果:
array([[ 0. , 10.77032961, 12.84523258, 15.23154621, 20.83266666],
[10.77032961, 0. , 7.93725393, 20.09975124, 16.43167673],
[12.84523258, 7.93725393, 0. , 19.72308292, 23.17326045],
[15.23154621, 20.09975124, 19.72308292, 0. , 23.4520788 ],
[20.83266666, 16.43167673, 23.17326045, 23.4520788 , 0. ]])
但我还不知道如何指定我们为其选择的邻居数量,例如为每个节点选择 2 个邻居。例如,我们定义邻居的数量 N = 2,然后对于每一行,我们只选择两个最小距离的邻居,我们得到结果:
[[ 0. , 10.77032961, 12.84523258, 0, 0],
[10.77032961, 0. , 7.93725393, 0, 0],
[12.84523258, 7.93725393, 0. , 0, 0],
[15.23154621, 0, 19.72308292, 0. , 0 ],
[20.83266666, 16.43167673, 0, 0 , 0. ]]
【问题讨论】:
-
您能否详细说明您认为节点是什么?是一排吗?您的示例输入所需的邻接矩阵输出是什么?
-
您好 Ehsan,感谢您的关注,是的,我的意思是逐个节点。我已经更新了出版物。
-
感谢您的清晰解释。请检查建议的答案是否能解决您的问题。
-
用
np.argsort和np.where检查我的解决方案
标签: python numpy matrix euclidean-distance adjacency-matrix