Node2vec(如何获得一个Node的BoundingBox)

2023-12-25 03:40:02 :70

node2vec(如何获得一个Node的BoundingBox)

本篇文章给大家谈谈node2vec,以及如何获得一个Node的BoundingBox对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

本文目录

如何获得一个Node的BoundingBox

自己写了2个函数,递归获取Node的BoundingBox和ContentSize,用着貌似没什么Bug。。。 onlyTexture参数的意思是只统计贴图占用的空间Rect getBoundingBoxRecursive(Node *node, bool onlyTexture = true) { CCAssert(node != nullptr, "node can’t be null"); Rect nodeRect = node-》getBoundingBox(); nodeRect.origin = node-》convertToWorldSpace(Vec2::ZERO); for_each(node-》getChildren().begin(), node-》getChildren().end(), (Node* subNode) { Rect subNodeRect; subNodeRect = getBoundingBoxRecursive(subNode); if (onlyTexture && nodeRect.size.equals(Size::ZERO)) { nodeRect.origin = subNodeRect.origin; } nodeRect.merge(subNodeRect); }); return nodeRect;} Vec2 getContentSizeRecursive(Node *node, bool onlyTexture = true) { return getBoundingBoxRecursive(node, onlyTexture).size;}

Python中运行node2vec访问weight总是出错怎么办

keyerror一般是你使用字典里不存在的key产生的错误,避免产生错误的方法很简单,使用字典的get方法,它接受一个key和一个默认值,这个默认值只有key不存在的使用返回,存在则只接访问key的值。

延伸拓展:

Python, 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。

Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议 。Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进。

Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。

常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。

需要注意的是在您使用扩展类库时可能需要考虑平台问题,某些可能不提供跨平台的实现。

7月20日,IEEE发布2017年编程语言排行榜:Python高居首位。

论文笔记之struc2vec: Learning Node Representations from Structural Identity

struc2vec是一种专注于网络structural identity的embedding算法,适合于无向无权图。 文中指出,大多数的graph embedding方法的想法是,如果两个节点有共同的neighbor节点,则它们有相似的representation。但问题在于neighborhood是一个非常local 的概念,如果两个节点在neighborhood的结构上是相似的,但这两个节点离得很远,就不会有相似的representation。 (大多数的graph embedding方法更关注homophily,而struc2vec可以有效挖掘structural identity。其实node2vec已经同时考虑了homophily和structural identity,但是node2vec的局限性在于,当两个节点的距离(节点之间的跳数)超过了Skip-Gram的window大小,就无法捕捉它们的structural identity了) 如上图中的节点u和v,它们有相似的local structure,但在网络中离得很远。它们的neighborhood没有共有的节点,很多graph embedding方法并不能捕捉这种结构相似性。 struc2vec的主要想法: •能够发现两个节点在neighborhood结构上的相似性,即使它们位于网络的不同位置上,没有直接相连。 •构建一种hierarchy来度量structural similarity。 -在低 hierarchy层面上,节点的structural similarity仅仅依赖于它们的度。 -在高hierarchy层面上,节点的structural similarity依赖于整个网络结构。 •生成节点的context,放入language model(如Skip-Gram)来学习representation。 学习节点的representation能够捕捉到节点的structural identity,一个好的方法应该具备以下两点: •节点的representation之间的距离应该与节点的structural similarity高度相关。即两个节点有相似的structural identity,则它们之间的representation应该是相似的。 •节点的representation不依赖于节点属性、边属性和节点label。节点的structural identity独立于节点在网络中的位置,及时两个节点离得很远,但它们有相似的structural identity,也能够识别出来。 基于上面两点,提出了struc2vec算法,由四个步骤组成: •对于不同的节点对,计算它们的结构相似度(structural similarity),并以此产生一个hierarchy。 •构造一个带权重的多层图,network中的所有节点都被摆放在这个新的图的每一层中。每一层都对应structural similarity的一个hierarchy。 •利用多层图来产生节点的context。具体来说,使用biased random walk在多层图上产生节点序列。 •通过Skip-Gram等算法来从节点的context中学习representation。 如果两个节点的度相同,就认为它们具有一定的structural similarity,如果它们的neighbor也有相同的度,那么就认为它们的structural similarity更高了。 G=(V,E)表示无向无权图。n = |V|表示network中的节点数,k*表示图的直径。Rk(u)表示从节点u出发,恰好经过k跳能到达的节点集合。R1(u)表示u的neighbor节点集合,Rk(u)可以看作与u距离为k的环。s(S)表示对于子集S ⊂V,S集合中节点的有序的度序列。fk(u,v)表示u和v之间的structural distance(考虑它们的k-hop neighborhood,即所有的节点距离≤k以及所有其中的边)。 定义 g(D1,D2)≥0度量了有序的度序列D1和D2的距离。f-1 = 0。 fk(u,v)对于k是单调不减函数,并且在u和v在距离k有节点时才有定义。 s(Rk(u))和s(Rk(v))可以有不同的长度,本文使用DTW来衡量它们之间的距离。 定义距离函数 也就是说,fk(u,v)考虑了≤k的部分,等于考虑了≤k-1部分的fk-1(u,v)加上考虑恰好为k的距离g(s(Rk(u)),s(Rk(v)))。 目标:衡量两个有序序列的距离。 具体步骤: 以序列A,B为例,A和B是有序的度序列,具体的,比如A = (1,1,2,8,10), B = (1,2,4,5) 将A和B分别水平和竖直排开,按照上面给出的d(a,b)的公式计算两两元素的距离。 根据上面的矩阵,计算A与B的距离,利用的是动态规划,每个位置的值如下(d(i,j)表示的是在上面那个矩阵对应位置的值) 计算得到, 那么序列A和序列B的距离为右上角的值3.2(越小越相似),即g(A,B) = 3.2。 定义多层图M,每一层k = 0,...,k*是节点集为V的带权无向完全图,一层中的两个节点之间的边权为 wk(u,v)≤1,等号当且仅当f(u,v)=0时取到。 与节点u在structural similarity上相似度高的节点,会在M的各层上有更大的边权。 上层(k比较大)偏向于考虑全局信息,下层(k比较小)偏向于考虑比较local的信息。 使用有向边将各层连接起来,第k层中的u节点和k+1层、k-1层中的u节点相连。 连接各层之间的边权为 其中 即第k层与u相连的边的边权大于平均边权的边的数量, 表示第k层的平均边权。 对于此处,τk(u)衡量了在第k层中,有多少节点和节点u的相似度比较高,如果τk(u)很大,说明当前层次比较低,那么w(uk,uk+1)就会比较大,倾向于向上层走。 在多层图M上使用biased random walk来获得各节点的context。 在每一步,首先要决定random walk会走到其它层还是留在当前层,random walk会停留在当前层的概率为q》0。 假设random walk会留在当前层,在第k层从节点u到节点v的概率为 Zk(u)为正则化因子, random walk会朝着有相似的structural similarity节点的方向。 有1-q的概率,random walk会离开当前层,到上层或下层对应的节点处,此时到上层和下层的概率分别是 对于每个节点,开启random walk时在第0层它对应的节点位置。 获得random walk sequence后,使用Skip-Gram来生成representation,文中使用了Hierarchical Softmax优化。 压缩有序的度序列长度,改为二元组序列(degree,counts)。 A’和B’表示压缩后的A和B,此时DTW距离函数为 a = (a0,a1), b = (b0,b1)为A’和B’中的二元组,a0和b0为度,a1和b1为出现的次数。 相似度计算优化。 在一层中,如果两个节点的度数相差很大,就不太可能被random walk采样到,因此没必要计算。 只计算与顶点u的度数接近的顶点的距离。在顶点u对应的有序的度序列中进行二分查找,只计算查找路径上的顶点与u的距离。 减少层数。 使用固定的k’层,k’《k*。

OK,关于node2vec和如何获得一个Node的BoundingBox的内容到此结束了,希望对大家有所帮助。

node2vec(如何获得一个Node的BoundingBox)

本文编辑:admin
Copyright © 2022 All Rights Reserved 威海上格软件有限公司 版权所有

鲁ICP备20007704号

Thanks for visiting my site.