Python recursive call for list elements -


i've tried create rough implementation of g-means break sample down clusters clusters gaussian using recursion, program seems going in 1 direction (downward). input values of method data set, x, , list of centres.

i'm having trouble figuring out how solve recursive bit of method (the last loop , beyond). after of recursive calls, want have list of centres in c can returned main method.

so here's happens in last loop. i'm iterating through list of clusters (found using cluster centres), clust, contain values in each cluster. run test see if there significant evidence values in each cluster gaussian. if there evidence, want remove cluster centre , add 2 new centres above , below. want run through recursive call , evaluate these new centres see if clusters match gaussian or not.

the problem program evaluating lower centre bound. seems never reach upper centre though return statement means program stop upper centre ever being reached.

does know how can method cover both lower , upper sides of cluster? (the loop makes 1 iteration ( in range(len(clust))) when length of clust = 2.

another problem i'm having method overwriting centres list instead of adding each recursive call. know how can make recursive calls while appending list? i'm inserting items list , passing part of list deeper level, on return, 2 values (both low).

def gmean(x,c):  label=vq.kmeans2(x,np.array(c))  #take care of centers not match clusters in kmeans2  while(len(set(range(len(c))))!=len(set((label[1])))):      emptyk=set(range(len(c)))- set(range(len(c))).intersection(set(label[1]))      emptyk=list(emptyk)      emptyk.reverse()      in range(len(emptyk)):          c.pop(emptyk[i])      label=vq.kmeans2(x,np.array(c))   #clust 2d list , holds values given cluster  clust=[[] x in range(max(label[1])+1)]  in range(len(label[1])):      j in range(len(clust)):          if j==label[1][i]:              clust[j].append(x[i])   in range(len(clust)):      transclust=np.transpose(clust[i])      notgausflag=false      j in range(len(transclust)):          if stats.anderson(transclust[j])[1][2]<stats.anderson(transclust[j])[0]:              notgausflag=true      if notgausflag==true:          upper,lower=findcenter(clust[i],c[i])          c.pop(i)          c.insert(i,upper)          c.insert(i,lower)          j in range(len(clust[i])):              clust[i][j]=clust[i][j].tolist()          clust[i]=np.array(clust[i])          return gmean(clust[i],c[i:i+2])  if notgausflag==false:      return c 

so think realize error in code i'm calling recursive method , passing cluster 2 cluster centres, when go step next level of recursive loop, ever step in first centre because second 1 isn't reached in loop (for in range(len(closet)):).

what should have done call recursive method this.

return gmean(clust[i],c[i])+gmean(clust[i],c[i+1])


Comments

Popular posts from this blog

PHP DOM loadHTML() method unusual warning -

python - How to create jsonb index using GIN on SQLAlchemy? -

c# - TransactionScope not rolling back although no complete() is called -