对于图中的每个顶点,此代码有效地从“特殊”顶点的特定子集中查找其k个最近的顶点。

graphknn的Python项目详细描述


#graph knn python module

给定一个无向图和一组终端(或种子)顶点t,这个python包为每个顶点从集合t中查找k个最近邻。



相同的接口,实现方式略有不同。
**输入**:
**w:**n x n边权矩阵,类型为scipy.sparse.csr_matrix。
**mask:**长度为n的布尔数组,指示哪些顶点属于终端集t。
**k:**为每个顶点查找多少个最近的邻居。

**输出:**
**knn:**这是一个大小为n的数组,因此knn[i]是最多k对(距离,终端顶点索引)的列表。注意,knn[i]没有排序。




算法1更简单,而算法2有更严格的运行时保证。我们已经看到了算法1比算法2快,反之亦然的情况,因此请在您的数据上同时尝试并选择更快的一个。



\example

`````
import numpy as np
import scipy.sparse
import graphknn

def build_sparse_nonnegative_csr_matrix(n):
w=np.random.random((n,n))
w=w+w.transpose()
w[w<;1.5]=n p.inf
return scpy.spar稀疏.csr矩阵(w)



def test graphknn():
n=10
p=0.5
k=3


w=build稀疏无向非负矩阵矩阵(n)
mask=np.随机随机随机随机(n)<;p


打印('图边:''''''''''graph矩阵(w)


def test def test graphnnn()
n=)
打印(w,“\n”)

print('终端索引:')
print(mask.nonzero()[0],'\n')


result=graphknn.algorithm1(w,mask,k)


print('所有顶点的k个最近终端索引:')
for i in range(len(result)):
print('result[{0}]:\n{1}。格式(i,排序(结果[i]))

test戋graphknn()
````

然后,对于每个顶点,我们检查矩阵的第i列并选择k个最近的单元(这可以使用hoare的选择算法有效地完成)。该方法的运行时间为o(t v log v+e)。然而,这种方法是浪费的,因为它花了很多时间寻找从终端到远离终端的顶点的不相关的最短路径。

此模块实现了一种更快的方法,可以描述为并行执行t dijkstra运行,并结合早期停止规则防止不必要的遍历。一旦我们找到了来自k个不同终端的最短路径,这个停止规则就会停止探索顶点。

Nadler(http://www. Weigman .AC.IL/Maa/ Nadler /home)[BR/> [*Max极大极小半监督回归在未知流形*](http://ARXIV.ORG/ABS/ 1611.02221),
AISATS(2017)。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java谷歌地图将地址转换为坐标   java舍入错误给了我无效的答案   JavaSpring3。0 mvc问题(请求的资源不可用)   java在关闭GraphStream时不关闭Swing主应用程序   java使用特定的orderby从包含多个子节点的FireBase数据库检索数据   java是否可以不安全地访问JVM未使用的对象?   java读取单词的第一个字母并选择其字母表编号   java在同一个包中导入类   安卓 java。lang.IndexOutOfBoundsException:索引0无效,大小为0   java JTextPane仅以单行显示插入的组件   java系统应用程序如何在CyanogenMod 11中以编程方式读取整个logcat?   java如何访问保存在中的变量。MatlabBuilder JA构建的jar文件中的mat文件?   Java不必要的图像覆盖   数组javajsonarray。包含(字符串)没有这样的函数?   javacamel:如何在文件组件中使用相同的头   java smack setKeystorePath不工作?   JavaJackcessDatabaseBuilder。开放式失败   对Jetty Jersey应用程序的java请求在1分钟后终止   在客户端断开连接后,java进程是否仍在继续   安全Java签名代码小程序混合代码警告即使在TrustedLibrary之后:true