我正在研究一个热图(对于这种情况,这可能是一个不正确的术语),用户将获得包含坐标和强度值的点。我所见过的每个实现都基于颜色的点密度,这不是我想要的。我一直在研究此主题一两天,并且一直在尝试寻找从坐标生成这种热图的最佳方法。
我目前一直在研究多变量内核密度估计,并且不确定这是否是正确的方法。我曾想过使用3d向量,其中x和y为坐标,z为强度,但是我不确定这是否可行。我看到的所有示例都是基于点密度的颜色。
当前我正在使用以下代码:
for p in points{ // loop over all measured points
// points are stored in a dict with the key being x+y*NUM_COL
let pX = p.key % NUM_COL
let pY = p.key / NUM_COL
let intensity = points[p.key]!.getAvg()
// loop over all surrounding points within square with size of radius * 2
for i in 0..<Int(pow(Double(2*RADIUS),2)){
let dX = (i % (2*RADIUS)) - RADIUS
let dY = (i / (2*RADIUS)) - RADIUS
let x = pX + dX
let y = pY + dY
let dist = (pow(Double(x-pX),2) + pow(Double(y-pY),2)).squareRoot()
// check if coordinate is in bounds and is not a measured value
if (x < 0 || x >= NUM_COL || y < 0 || y >= NUM_ROW || dist > Double(RADIUS) || points[x+y*NUM_COL] != nil){
continue
}
grid[y][x] += intensity * (1 - (dist/RADIUS))
}
}
结果类似(黑点是测量点):
我的问题是,无论是在性能上还是视觉上,我都可以做些什么来改善它? 我应该继续推动mvkde的发展吗?有没有更好的方法来查找循环更少的值?
注意:
答案 0 :(得分:0)
由于@NicoSchertler,我一直在寻找“分散的数据插值”