2016-11-23 3 views
0

Я пытаюсь написать алгоритм k единиц и на очень базовом этапе прямо сейчас.
код выглядит следующим образом случайным образом выбирать центры кластеров:Keyerror: 1 python

import numpy as np 

import random 

X = [2,3,5,8,12,15,18] 

C = 2 

def rand_center(ip,C): 

    centers = {} 
    for i in range (C): 
     if i>0: 
      while centers[i] != centers[i-1]: 
       centers[i] = random.choice(X) 
       else: 
      centers[i] = random.choice(X) 
    return centers 
    print (centers) 

rand_center(X,C) 

Когда я запускаю это, она дает мне KeyError: 1
Может кто-нибудь руководство мне разрешить эту ошибку?

+1

Кстати, вы не можете печатать (или делать что-либо) после этого статута возврата –

ответ

1

while centers[i] != centers[i-1] ... Что происходит на второй итерации цикла for i in range (C):?

centers[1] != centers[0] ... В этом пункте нет centers[1].

0

Я предполагаю, что эта проблема связана с неправильным индексом массива. Поэтому, если вы повторно проверите индексы, переданные в массиве, вы сможете решить эту проблему. И мне будет более полезно отлаживать ваш код, если вы разместите номер строки, в которой вы получаете эту ошибку.

0

код неправильно, вы должны повторно записать его следующим образом

import numpy as np 
import random 

X = [2,3,5,8,12,15,18] 

C = 2 

def rand_center(ip,C): 
    if C<1: 
     return [] 
    centers = [random.choice(ip)] 
    for i in range(1,min(C,len(ip))): 
     centers.append(random.choice(ip)) 
     while centers[i] in centers[:i]: 
      centers[i] = random.choice(ip)   
    return centers 

print (rand_center(X,C)) 
+0

Спасибо всем! – leo

0

Я надеюсь, что вы хотите выход: есть. Словарь с ключом и значением , который не имеет такого же значения в Current, Previous и Next.

import numpy as np 
import random 

X = [2,3,5,8,12,15,18] 
C = 2 

def rand_center(ip,C): 
    centers = {} 
    for i in range (C): 
     rand_num = random.choice(X) 
     if i>0: 
      #Add Key and Value in Dictionary. 
      centers[i] = rand_num 
      #Check condition if it Doesn't follow the rule, then change value and retry. 
      while rand_num != centers[i-1]: 
       centers[i] = rand_num 
       #Change the current value 
       rand_num = random.choice(X) 
     else: 
      #First Key 0 not having previous element. Set it as default 
      centers[i] = rand_num 
    return centers 

print"Output: ",rand_center(X,C)