- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个无向图,有 1034 个顶点和 53498 条边。我正在计算顶点的优先附着指数。两个顶点之间的优先依附相似度定义为第一个顶点的度乘以第二个顶点的度。我注意到我的计算速度很慢。计算上述图表需要 2.7 分钟。我不确定是我的算法慢了还是其他什么地方出了问题。如果有人可以稍微查看一下我的代码,我将不胜感激。
编辑:我刚刚意识到 S 是一个 1034_by_1034 矩阵。查看嵌套的 for 循环,它似乎是一个 O(n^2) 算法!我想这就是为什么它很慢。你不同意吗?
def pa(graph):
"""
Calculates Preferential Attachment index.
Returns S the similarity matrix.
"""
A = gts.adjacency(graph)
S = np.zeros(A.shape)
for i in xrange(S.shape[0]):
for j in xrange(S.shape[0]):
i_degree = graph.vertex(i).out_degree()
j_degree = graph.vertex(j).out_degree()
factor = i_degree * j_degree
S[i,j] = factor
return S
最佳答案
据我所知,这些是我可以建议的加速:
第 0 次加速:i_degree 不依赖于 j,因此将其提高一级
def pa(graph):
A = gts.adjacency(graph)
S = np.zeros(A.shape)
for i in xrange(S.shape[0]):
i_degree = graph.vertex(i).out_degree() # easy to see that this can be put here instead, since it does not depend on j
for j in xrange(S.shape[0]):
j_degree = graph.vertex(j).out_degree()
factor = i_degree * j_degree
S[i,j] = factor
return S
第一次加速:只调用 out_degree() N 次,而不是 2N^2 次。
def pa2(graph):
A = gts.adjacency(graph)
i_degree = numpy.zeros(A.shape[0])
for i in xrange(A.shape[0]):
i_degree[i] = graph.vertex(i).out_degree()
S = np.zeros(A.shape)
for i in xrange(S.shape[0]):
for j in xrange(S.shape[0]):
S[i,j] = i_degree[i]*i_degree[j]
return S
第二次加速:numpy 代替 python for-loop
def pa3(graph):
A = gts.adjacency(graph)
i_degree = numpy.zeros(A.shape[0])
for i in xrange(A.shape[0]):
i_degree[i] = graph.vertex(i).out_degree()
S = i_degree[:,None]*i_degree[None,:]
return S
这会滥用问题的对称性。
注意:[None,:]
与使用 [numpy.newaxis,:]
的作用相同。如果你想保留你的代码,你也可以在 out_degree()
方法上使用 @memoize
装饰器,但最好只在递归的东西上使用它,这不是其中一种情况。
关于python - 为什么计算优先依恋成本很高?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22553665/
我正在为安卓手机开发一款游戏。当我在我的 galaxy s 上测试我的 ggame 时,帧率约为 60,游戏相当流畅。但是当我在我兄弟的 galaxy ace 上测试游戏时,即使帧率仍然是 60,游戏
我正在运行一个加载大文件的脚本。我在单核 OpenSuSe 服务器和四核 PC 上运行了相同的脚本。正如在我的 PC 中预期的那样,它比在服务器中快得多。但是,该脚本会降低服务器速度并使其无法执行任何
我使用 Express & Jade 在 nodejs 中创建了一个网站。当我加载内容非常少的简单登录页面时,即使这样加载也需要很多时间。它的 TTFB 太高(引用所附的屏幕截图。) 下面是我的 ap
我是一名优秀的程序员,十分优秀!