私はクラスタリングアルゴリズムを書いており、その一部については、各クラスターのユークリッド距離行列を計算しています。 (FYIのすべてはTensorflowにあります)。各クラスタは8次元ベクトルのリストであり、それを1つのM * 8行列に変換します。各クラスタの各点について、そのクラスタと最も近い隣人との間の距離を求めたい。私は、これを行う最も効率的な方法は、各クラスタのポイント間の対間距離を計算し、結果のM * M行列の各行で2番目に小さい値を見つけることです(各行の最小値は常に0、与えられた点とそれ自身の間の距離)。ここでテンソルフローの2番目に小さい値を見つける方法
は、私は、各クラスタのユークリッド距離行列を作成するために使用するコードです:
partitionedData = tf.dynamic_partition(inputs, pred, num_classes)
for partition in partitionedData:
N = tf.to_int32(partition.get_shape()[0])
qexpand = tf.expand_dims(partition,1)
qTexpand = tf.expand_dims(partition,0)
qtile = tf.tile(qexpand,[1,N,1])
qTtile = tf.tile(qTexpand,[N,1,1])
deltaQ = qtile - qTtile
deltaQ2 = deltaQ*deltaQ
d2Q = tf.reduce_sum(deltaQ2,2)
結果の行列は、この(注:これは距離の二乗の行列である):のようなものに見えるかもしれません
を私が目に取得したいと思い何[[2,3],[4,5],[1,4],[5,6]]
:の入力行列のため
[[ 0. 8. 2. 18.]
[ 8. 0. 10. 2.]
[ 2. 10. 0. 20.]
[ 18. 2. 20. 0.]]
e endは、各行の2番目に小さい値です。この場合は2,2,2および2です。さらに、計算上のクラスター内のすべての点について、テンソルフローで最も近い隣にある距離を見つけるより良い方法があれば効率的な、それは非常に役に立つでしょう。
ありがとうございます。 tf.matrix_set_diag関数は必要なものです。それは非常に簡単にする必要があります。 –