Uma solução simplista será:
import random
def cria_centroides(k,dicio_dados):
“”” Devolve lista de k centroides escolhidos aleatoriamente.”””
centroides = []
chaves_centroides = []
conta_centroides = 0
while centroides < k:
chave_alea = random.randint(1,len(dicio_dados))
if chave_alea not in chaves_centroides:
centroides.append(dicio_dados[chave_alea])
chaves_centroides.append(chave_alea)
conta_centroides = conta_centroides + 1
return centroides
Existem variantes. Apresentamos uma, que se nos afigura mais elegante.
import random
def cria_centroides_b(k,dicio_dados):
“”” Devolve lista de k centroides escolhidos aleatoriamente.”””
centroides = []
chaves_centroides = []
for i in range(k):
chave_alea = random.randint(1,len(dicio_dados))
while chave_alea in chaves_centroides:
chave_alea = random.randint(1,len(dicio_dados))
centroides.append(dicio_dados[chave_alea])
chaves_centroides.append(chave_alea)
return centroides
Veja-se como o ciclo for trata do problema da contagem e como asseguramos a não repetição com um ciclo while no interior do ciclo for.
Stor eu ponho a dicionário e o programa nao me devolve nada....
ResponderEliminarpoderia ajudar?
obrigado
Sem mais elementos é difícil. Tem que criar um dicionário de dados concreto. Ou o faz com a operação cria_dicio_dados(emno_do_ficheiro_de_dados) ou inventa um para testar. Depois chama cria_centroides como um numero concreto de agrupamentos e com o dicionário criado, e manda imprimir o resultado.
ResponderEliminarPor exemplo:
>>> dicio_dados= {1:(1,2),2:(4,5),3:(5,6),4:(8,9),5:(2,7)}
>>> print cria_centroides(3,dicio_dados)
Professor, queria fazer um reparo.
ResponderEliminarNão sei se estou correcto, mas onde está na linha 6(chave_centroides=[]) nao deveria estar(chaves_centroides=[])?
Isto porque dentro do ciclo while estão definidas operações em relação a uma lista, denominada chaves_centroides, que não está definida anteriormente.
Está certo sim senhor. Foi já emendado. Na realidade as soluções que apresentei aqui não foram a que inicialmente pensei e por isso não as testei...
ResponderEliminar