我有相似度值矩阵(m)如下:
[,1] [,2] [,3]
[1,] 1.0000000 1.0000000 0.8579698
[2,] 1.0000000 1.0000000 0.8579698
[3,] 0.8579698 0.8579698 1.0000000
我想通过简单的方式获得 0.8579698 的位置。 我试图使用哪个功能 它适用于元素1。
which( m == 1.0000000, TRUE)
有什么想法吗?
答案 0 :(得分:4)
问题并没有说明这个矩阵是如何构造的,但是这个问题似乎是由于0.8579698是实数(浮点)值的截断表达式。通常,您不能将精确相等用于实际值:
> .72==.72
[1] TRUE
可是:
> sqrt(.72)
[1] 0.8485281
> sqrt(.72)==0.8485281
[1] FALSE
这些显然相等的数字之间存在细微差别:
> sqrt(.72)-0.8485281
[1] 3.742386e-08
常见的解决方法是使用差异阈值而不是相等:
> m<-matrix(c(1,1,.72,1,1,.72,.72,.72,1),nrow=3,ncol=3)
> (m<-sqrt(m))
[,1] [,2] [,3]
[1,] 1.0000000 1.0000000 0.8485281
[2,] 1.0000000 1.0000000 0.8485281
[3,] 0.8485281 0.8485281 1.0000000
> which(abs(m-.8485)<.0001,arr.ind = TRUE)
row col
[1,] 3 1
[2,] 3 2
[3,] 1 3
[4,] 2 3