- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
仅供引用:这不是家庭作业
我尝试在 Python 中实现 Clauset-Newman-Moore 社区检测算法,当它运行时,它输出的模块化 (Q) 值始终因某些因素而偏离。完整的代码如下 - 它接受格式为 this 的文本文件.
虽然我不希望任何人提供修复所有代码的完整解决方案,但非常感谢任何可能出错的提示!!
一些可能很重要的注意事项:
#!/usr/bin/env python
'''
Usage:
python cnm.py <input_file> <output_file>
'''
import heapq
import sys
import time
from pprint import pprint
def read_input(filename):
''' Loads the input into a dictionary'''
output_dict = {}
with open(filename, 'r') as f:
for line in f:
l = line.split('\t')
key = int(l[0].strip())
value = int(l[1].strip())
if key not in output_dict:
output_dict[key] = []
if value not in output_dict:
output_dict[value] = []
if value in output_dict[key]:
pass
else:
output_dict[key].append(value)
if key in output_dict[value]:
pass
else:
output_dict[value].append(key)
return output_dict
def calculate_m(input_dict):
''' Gives the total number of edges in the network. '''
total = 0
for key in input_dict:
total += len(input_dict[key])
return total / 2
def calculate_deltaQ(m, ki, kj):
''' Calculates deltaQ for two communities i and j '''
deltaQ = 1.0/(2.0*m) - float(ki*kj) / ((2*m)**2)
return deltaQ
def populate_Qtrees(input_dict, m):
Qtrees = {}
for i in input_dict:
community = input_dict[i]
ki = len(community)
Qtrees[i] = {}
for j in community:
kj = len(input_dict[j])
Qtrees[i][j] = calculate_deltaQ(m, ki, kj)
return Qtrees
def populate_Qheaps(input_dict, m):
Qheaps = {}
for key in input_dict:
community = input_dict[key]
ki = len(community)
Qheaps[key] = []
for i in community:
kj = len(input_dict[i])
deltaQ = calculate_deltaQ(m, ki, kj)
# we store the items in the heap as their negative values because
# python heap is a min-heap
heapq.heappush(Qheaps[key], (-deltaQ, i, key))
return Qheaps
def populate_H(Qheaps):
H = []
for key in Qheaps:
if Qheaps[key] == []:
continue
else:
maximum = Qheaps[key][0]
heapq.heappush(H, maximum)
return H
def populate_a(input_dict, m):
a = {}
for key in input_dict:
k = len(input_dict[key])
ai = float(k) / (2.0 * m)
a[key] = ai
return a
def select_largest_q(H):
return heapq.heappop(H)
def update_Qtrees(Qtrees, a, i, j):
# from equation 10a - summing i into j
for key in Qtrees[i]:
if key in Qtrees[j]:
Qtrees[j][key] = Qtrees[i][key] - Qtrees[j][key]
# from equations 10b and 10c - update row j
for key in Qtrees:
if key in Qtrees[i] and key not in Qtrees[j]:
Qtrees[j][key] = Qtrees[i][key] + (2 * a[j] * a[key])
elif key in Qtrees[j] and key not in Qtrees[i]:
Qtrees[j][key] = Qtrees[j][key] + (2 * a[i] * a[key])
# remove i key and update j for each row k
for key in Qtrees:
if i in Qtrees[key]:
Qtrees[key].pop(i, None)
if j in Qtrees[key]:
Qtrees[key][j] = Qtrees[key][j] + (2 * a[i] * a[key])
# remove the self-reference (necessary because our tree is a python dict)
if j in Qtrees[j]:
Qtrees[j].pop(j, None)
# remove i
Qtrees.pop(i, None)
return Qtrees
def update_Qheaps(Qtrees, Qheaps, i, j):
# remove the heap i
Qheaps.pop(i, None)
# rebuild the jth heap from the jth binary tree in Qtree
community = Qtrees[j]
h = [ (community[key], key, j) for key in community ] # list comprehension
heapq.heapify(h)
Qheaps[j] = h
# remove the ith and update the jth element in each heap
for key in Qheaps:
heap = Qheaps[key]
for item in heap[:]:
if item[1] == i:
heap.remove(item)
heapq.heapify(heap)
elif item[1] == j:
# we temporarily change the item to a list to perform insertion
# (tuples are immutable)
item_copy = list(item)
heap.remove(item)
item_copy[0] = Qtrees[key][j]
heapq.heappush(heap, tuple(item_copy))
return Qheaps
def update_a(a, i, j):
a[j] += a[i]
a[i] = 0
return a
def main():
''' Main loop of the program. '''
# read command line input
filename = sys.argv[1]
maxQ = 0
max_step = 0
Q = 0
input_dict = read_input(filename)
m = calculate_m(input_dict)
nodes = len(input_dict)
Qtrees = populate_Qtrees(input_dict, m)
Qheaps = populate_Qheaps(input_dict, m)
H = populate_H(Qheaps)
a = populate_a(input_dict, m)
step = 0
print 'i', '\t', 'j', '\t', 'Q', '\t\t', 'deltaQ', '\t\t', 'step'
while H:
deltaQ, i, j = select_largest_q(H)
Q -= deltaQ
Qtrees = update_Qtrees(Qtrees, a, i, j)
Qheaps = update_Qheaps(Qtrees, Qheaps, i, j)
H = populate_H(Qheaps)
a = update_a(a, i, j)
step += 1
print i, '\t', j, '\t', round(Q, 7), '\t', round(deltaQ, 7), '\t', step
if deltaQ < 0:
maxQ = deltaQ
max_step = step
else:
pass
output_file = sys.argv[2]
with open(output_file, 'w+') as f:
f.write(
'''FASTCOMMUNITY_INFERENCE_ALGORITHM in python!
START-----: {0}
---NET_STATS----
NUMNODES--: {1}
NUMEDGES--: {2}
---MODULARITY---
MAXQ------: {3}
STEP------: {4}
EXIT------: {5}'''.format(time.asctime(),
nodes,
m,
maxQ,
max_step,
time.asctime() ))
if __name__ == '__main__':
main()
最佳答案
让我担心的一件事是:
heap.remove(item)
item_copy[0] = Qtrees[key][j]
heapq.heappush(heap, tuple(item_copy))
heap.remove(item) 将从称为堆的列表中删除项目 - 并销毁堆不变量。
换句话说,在这一步之后,你的名为 heap 的变量可能不再是一个堆。
也许打电话会有所帮助
heapq.heapify(heap)
在 heap.remove(item) 之后。
关于python - python中的Clauset-Newman-Moore社区检测算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24618156/
我正在尝试使用 HTML 报告器安装和运行 Postman 的 Newman 测试集合(在带有来自 Postman 帐户的 docker 图像的 jenkins podTemplate 容器上)但它一
我有一个 curl 命令,我想使用 newman 作为一个集合运行它: curl -i -v \ -H "X-FromAppId: APPLICATION" \ -H "X-Transaction
对特定服务器的所有请求都超时,并显示错误 ETIMEDOUT。 [...]$ newman -c Test.json.postman_collection Iteration 1 of 1 Reque
我对 ubuntu(linux) os 有非常基本的了解,并且刚刚开始使用 dockers。 现在我必须创建一个 postman/newman docker,它有一个包含 postman 集合 jso
几个月前,我在 AWS CodeBuild 上安装了 Newman( postman cli),它运行良好。然后这个错误突然出现:error: Unknown encoding: latin1 在本地
我有一个 Postman 集合,我正在尝试与 newman 一起使用,但我的环境变量没有被使用。 请求 URL 只是 {{url}},然后我有一个同名的环境变量。我正在使用此命令运行我的测试: new
我有兴趣经营 Newman 的modularity大图上的聚类算法。如果您可以将我指向实现它的库(或 R 包等),我将不胜感激。 最好的 ~拉拉 最佳答案 使用 R 的 igraph 包: http:
在 Newman 中,我想进行测试以确保响应代码正确、响应时间合理且响应值正确。 在某些情况下,由于网络故障或其他系统条件,某些请求可能会出现超时或错误值,如果几秒钟后处理相同的请求,这些问题就会得到
我关注了以下Medium发布关于如何在 Azure DevOps 或 TFS 中配置 postman/newman API 测试并发布 HTML 结果? 在我的管道中,我有一个安装 newman 的任
我关注了以下Medium发布关于如何在 Azure DevOps 或 TFS 中配置 postman/newman API 测试并发布 HTML 结果? 在我的管道中,我有一个安装 newman 的任
我与 Newman 有以下几行(工作正常),但我希望在同一个请愿书中执行两个文件夹。首先将执行 Login_full 然后另一个(这不是必需的) newman run Example.postman_
我在我的计算机上全局安装了“newman”包并且能够在命令行上运行 newman npm install -g newman 但是,我需要在 nodejs 脚本中运行我的测试集合,下面的语句会抛出异常
我正在使用 newman 和 postman 来运行一套 postman 请求和相关的测试脚本。 我有一个环境变量,它是一条我无法存储在磁盘上的敏感信息(因此我无法在 JSON 测试文件中声明它)。我
运行 newman v.3.2.0 时出现此错误: #失败细节 1.错误的自签名证书 最佳答案 通过运行此修复此问题: $ newman run examples/sample-collection.
仅供引用:这不是家庭作业 我尝试在 Python 中实现 Clauset-Newman-Moore 社区检测算法,当它运行时,它输出的模块化 (Q) 值始终因某些因素而偏离。完整的代码如下 - 它接受
这是我第一次使用 Jenkins 进行自动化测试。我尝试通过将 Newman 与 Jenkins 集成来运行测试,但我总是得到 控制台错误 "Newman : command not found" 结
我已经定义了几个 Postman 测试集合/文件夹及其相关的测试数据文件。通过 Postman Collection Runner 和 Newman 单独运行它们可以正常工作。我想一起批处理多个运行,
我正在尝试使用 Newman 为 Postman 脚本生成 HTML 报告。 但是,我没有看到在所需位置生成的报告。 我正在使用 azure DevOps。 [command]/usr/local/b
我有一个 GitLab CI 作业,它使用自定义环境运行一系列 Postman 请求。我正在使用 Newman 将它们与 newman-reporter-htmlextra 一起运行生成测试报告的 n
我正在尝试使用 Newman 为 Postman 脚本生成 HTML 报告。 但是,我没有看到在所需位置生成的报告。 我正在使用 azure DevOps。 [command]/usr/local/b
我是一名优秀的程序员,十分优秀!