2014-11-23 53 views
0

我正在運行聚類雙打的集合的集合的聚類算法。但是,一旦聚類完成,我想弄清楚每個Double屬於哪個父類。添加物業Double類

class PatientMRNA { 
    Patient patient 
    MRNA mrna 
    Double value 
} 

我詢問與HQL數據庫,並把選擇的值從PatientMRNA表到一個集合,像這樣:

[[x11,x12...x1m],[x21,x22...x2m]...[xn1, xn2, xnm]] 

這個系列得到由這裏找到一個非常好的算法集羣:https://coviello.wordpress.com/2013/03/30/learning-functional-programming-a-k-means-implementation-in-groovy/

一旦集羣完成後,我們的結論如下:

[[centroid]: [[x?1, x?2...x?m],[x?1,x?2...x?m]...[x?1,x?2...x?m]] [centroid2]: [[],[]...[]] 

,其中每個x陣列(屬於患者)的值根據隨機它被分配給該羣集上。

我的問題是:有沒有辦法在常規擴展雙類,以便它也有一個PatientId財產?或者我真的應該以其他方式來看待這個問題嗎?

回答

5

kocko是錯誤的,只要所有的代碼是在Groovy,您可以使用實例的metaClass如下所示:

// a list of patients 
def patients = [ 'a', 'b', 'c', 'd', 'e' ] 

// A list of doubles 
def doubles = [ 5.0, 6.0, 2.0, 1.0, 9.0 ] 

// for each double, set it's patient property to the parent at the same index 
def decorated = [doubles, patients].transpose().collect { dbl, patient -> 
    dbl.metaClass.patient = patient 
    dbl 
} 

// sort it for fun, to prove it works 
def sortedDecorated = decorated.sort(false) 

// and print each out 
sortedDecorated.each { 
    println "$it ${it.patient}" 
} 

,打印:

1.0 d 
2.0 c 
5.0 a 
6.0 b 
9.0 e 

當然,如果你通過雙打的名單掉一些Java代碼,然後kocko是沒錯的Java沒有元類的知識,所以將只返回您簡單的無修飾雙打

+0

赦免名單,如果這違反堆棧溢出規則,但我想我愛你。非常感謝! – janDro 2014-11-23 22:57:32

+0

哈哈!很高興幫助,玩得開心! X ;-) – 2014-11-23 23:03:45