2017-08-31 14 views
1

Iが蛇腹のように類似度行列(M)を有する:復帰位置 - R

  [,1]  [,2]  [,3] 
[1,]  1.0000000 1.0000000 0.8579698 
[2,]  1.0000000 1.0000000 0.8579698 
[3,]  0.8579698 0.8579698 1.0000000 

Iは、簡単な方法によって0.8579698の位置を取得したいと思います。 私はそれが

which(m == 1.0000000, TRUE) 

任意のアイデア素子1のために正常に動作します機能 を使用しようとしましたか?

+0

この例では、 'which(m)<1'を実行することもできます。 – lmo

答えて

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 
+0

行列はユークリッド距離をデータセットに適用して生成された – Noor

+0

次に、私の問題は、平方根を使って生成された私の例行列では同じと仮定します。回避策はあなたのために機能しましたか? – Pere

+0

はい、ありがとうございましたPere – Noor