Форум сайта python.su
У меня структура которая формирует кластеры:
import numpy as np class SingleLinkage: def __init__(self, x, k): self.data = x n=x.shape[0] self.clusters={i : [i] for i in range(n)} self.k=k self.y=None def euc(self,x,y): self.x=x if self.y==None: self.y=y return np.sqrt(np.sum((x-y)**2)) def clustDist(self, i, j): cd=np.Inf for idx in self.clusters[i]: for idy in self.clusters[j]: cd=min(cd,self.euc(self.data[idx], self.data[idy])) return cd def findClothest(self): cd=np.Inf for i in self.clusters: for j in self.clusters: if i!=j and clustDist(i,j)<cd: cc=(i,j) cd=clustDist(i,j) #returns the indices of the clothest clusters def merge(self,i,j): self.clusters[i]+=self.clusters[j] self.clusters.pop(j)
>>> x = np . array ([[0 , 0] , [0 , 0.1] , [1 , 1]]) >>> hc = lc . SingleLinkage (x , 2) >>> hc . clusters
>>> hc . clusters {0: [0], 1: [1], 2: [2]}
{0: [0 , 1] , 1: [2]}
Отредактировано Lena13_08 (Дек. 6, 2017 14:18:36)
Офлайн
Lena13_08
ну, что написано, то и возвращает
self.clusters = {i : [i] for i in range(n)}
Офлайн
sander
Lena13_08ну, что написано, то и возвращает
>>> hc . clusters {0: [0], 1: [1], 2: [2]}
{0: [0 , 1] , 1: [2]}
Офлайн
sander
Lena13_08
ну, что написано, то и возвращает
self.clusters = {i : for i in range(n)}
Lena13_08Вам же sander ясно написал.
ответ как я поняла даёт стартовые позиции:
>>> hc . clusters
{0: , 1: , 2: }
>>>a = {i: [i] for i in range(3)} >>>a {0: [0], 1: [1], 2: [2]}
Отредактировано papuas (Дек. 6, 2017 21:49:10)
Офлайн
Лена вы быстро учитесь. Сформулировали что получилось и что хотели. Вы привели рабочий код. Отлично!
Давайте я вам ваш код упрощу.
import numpy as np class SingleLinkage: def __init__(self, x, k): self.clusters={i : [i] for i in range(n)} x = np . array ([[0 , 0] , [0 , 0.1] , [1 , 1]]) hc = lc . SingleLinkage (x , 2) hc . clusters
>>> hc . clusters {0: [0], 1: [1], 2: [2]}
{0: [0 , 1] , 1: [2]}
Отредактировано doza_and (Дек. 6, 2017 22:27:50)
Офлайн
papuasТак в этом и есть проблема я знаю что делают функции в одиночку и зна. что оно не выдаёт ничего.
Офлайн
doza_and
Лена вы быстро учитесь. Сформулировали что получилось и что хотели. Вы привели рабочий код. Отлично!Давайте я вам ваш код упрощу.
import numpy as np class SingleLinkage: def __init__(self, x, k): self.data = x n=x.shape[0] self.clusters={i : [i] for i in range(n)} self.k=k self.y=None def euc(self,x,y): self.x=x if self.y==None: self.y=y return np.sqrt(np.sum((x-y)**2)) def clustDist(self, i, j): cd=np.Inf for idx in self.clusters[i]: for idy in self.clusters[j]: cd=min(cd,self.euc(self.data[idx], self.data[idy])) return cd def findClothest(self): cd=np.Inf for i in self.clusters: for j in self.clusters: if i!=j and clustDist(i,j)<cd: cc=(i,j) cd=clustDist(i,j) return cd def merge(self,i,j): self.clusters[i]+=self.clusters[j] self.clusters.pop(j) return self.clusters
Офлайн
Lena13_08Если вы его не можете его использовать то значит он вам не нужен. Пишите функциями.
могу написать одну функцию за другой но мне нужен Class
Lena13_08Неправда, вы отлично все слепили без синтаксических ошибок.
и я никак не могу понять как слепить всё вместе.
def euc(self,x,y): # определяю функцию для .... self.x=x # не знаю зачем написала self.x вообще нигде не используется if self.y==None: # тут запоминаем первый пришедший y тоже непонятно зачем он тоже не используется self.y=y return np.sqrt(np.sum((x-y)**2)) # в конечном итоге функцию не надо было пихать в класс, она с ним делала бесполезные вещи.
Офлайн