Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“中的Python数据挖掘代码出现问题”;“规划集体智慧”;数交叉线_Python_Data Mining - Fatal编程技术网

“中的Python数据挖掘代码出现问题”;“规划集体智慧”;数交叉线

“中的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

我目前正在通过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(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')]