“中的Python数据挖掘代码出现问题”;“规划集体智慧”;数交叉线
我目前正在通过Toby Segaran的编程集体智能进行工作,并试图通过优化章节中的一些代码进行工作,特别是计数行代码。然而,我在代码中遇到了两个我不太理解的问题。 代码“中的Python数据挖掘代码出现问题”;“规划集体智慧”;数交叉线,python,data-mining,Python,Data Mining,我目前正在通过Toby Segaran的编程集体智能进行工作,并试图通过优化章节中的一些代码进行工作,特别是计数行代码。然而,我在代码中遇到了两个我不太理解的问题。 代码 def crosscount(v): loc = dict([(people[i],(v[i*2],v[i*2+1])) for i in range(0, len(people))]) total = 0 for i in range(len(links)): for j in range(i+1, len(l
def crosscount(v):
loc = dict([(people[i],(v[i*2],v[i*2+1])) for i in range(0, len(people))])
total = 0
for i in range(len(links)):
for j in range(i+1, len(links)):
(x1,y1), (x2,y2) = loc[links[i][0]],loc[links[i][1]]
(x3,y3), (x4, y4)= loc[links[j][0]],loc[links[j][1]]
den = (y4-y3)*(x2-x1)-(x4-x3)*(y2-y1)
if den == 0: continue
最初,我在定义loc字典的行中得到了错误“列表索引超出范围”,其中定义了v[I*2],我认为这是因为v是生成的随机数,而不是列表
为了使其正常工作,以便我可以尝试遵循逻辑,我将其更改为v*2以生成整数对,但在使用“不支持的操作数类型为-:“list”和“list”计算den的行中抛出了一个错误。我曾尝试将(x1,y1)等作为列表,然后对其进行切片,但仍然得到相同的结果,除非首先将值转换为字符串(这似乎非常不符合python),否则转换为int()是不起作用的。如果您能给我一些关于如何让这段代码工作的建议,我将不胜感激,这样我就可以看到在计算交叉线时应该发生什么 好吧,我读了这本书,我搜索了我的测试代码,找到了它对我的作用,graph score函数如下:
def graphscore(v, proxlimit = 50):
loc = dict([(people[i], (v[i*2], v[i*2+1])) for i in range(0, len(people))])
total = 0.0
#penalize crosscount
for i in range(len(links)):
for j in range(i+1, len(links)):
(x1, y1), (x2, y2) = loc[links[i][0]], loc[links[i][1]]
(x3, y3), (x4, y4) = loc[links[j][0]], loc[links[j][1]]
den = (y4-y3)*(x2-x1)-(x4-x3)*(y2-y1)
if den==0: continue #lines parallel
ua = ((x4-x3)*(y1-y3)-(y4-y3)*(x1-x3))/float(den)
ub = ((x2-x1)*(y1-y3)-(y2-y1)*(x1-x3))/float(den)
if ua > 0 and ua < 1 and ub > 0 and ub < 1:
total += 1.0
#penalize tightened nodes
for i in range(len(people)):
for j in range(i+1, len(people)):
(x1, y1), (x2, y2) = loc[people[i]], loc[people[j]]
dist = math.sqrt(math.pow(x1-x2, 2) + math.pow(y1-y2, 2))
if dist < proxlimit:
total += (1.0-(dist/proxlimit))
return total
缩进被破坏了,这段代码肯定不会像编写的那样编译。另外,当我们不知道什么数据类型是
链接
和人
时,很难回答这个问题。链接中的链接有两个很大的范围…为什么不?
people = ['Charlie', 'Augustus', 'Veruca', 'Violet',
'Mike', 'Joe', 'Willy', 'Miranda']
links = [('Augustus', 'Willy'),
('Mike', 'Joe'),
('Miranda', 'Mike'),
('Violet', 'Augustus'),
('Miranda', 'Willy'),
('Charlie', 'Mike'),
('Veruca', 'Joe'),
('Miranda', 'Augustus'),
('Willy', 'Augustus'),
('Joe', 'Charlie'),
('Veruca', 'Augustus'),
('Miranda', 'Joe')]