2014-11-23 5 views
0

Я запускаю алгоритм кластеризации, который группирует коллекцию коллекций парных разрядов. Однако, как только кластеризация завершена, я хотел бы выяснить, к какому родительскому классу принадлежит каждый 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 (принадлежащий пациенту) рандомизирован в зависимости от кластера, которому он назначен.

Мой вопрос: есть ли способ расширить класс Double в groovy, чтобы он также имел свойство PatientId? Или я действительно должен смотреть на эту проблему каким-то другим способом?

ответ

5

kocko не так, пока весь код находится в Groovy, вы можете использовать экземпляр метакласса, как показано здесь:

// 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

+0

Ха-ха! Рад помочь, повеселиться! Икс ;-) –

Смежные вопросы