我正在运行一个聚类算法,该算法聚集了双打集合的集合。但是一旦完成聚类,我想知道每个Double属于哪个父类。
class PatientMRNA {
Patient patient
MRNA mrna
Double value
}
我使用hql查询数据库,并将PatientMRNA表中的选定值放入Collection中,如下所示:
[[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阵列(属于患者)值是随机分配的,具体取决于它所分配的群集。
我的问题是:有没有办法在Groovy中扩展Double类,以便它还具有PatientId属性?或者我应该以其他方式看待这个问题吗?
答案 0 :(得分: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不知道metaClass,所以只返回一个简单的未修饰双打列表