我有一个n * m张量,基本上代表n维欧几里德空间中的m个点 . 我想计算每个连续点之间的成对欧氏距离 .
也就是说,如果我的列向量是点a,b,c等,我想计算euc(a,b),euc(b,c)等 .
结果将是具有每个成对欧氏距离的m-1长度1D-张量 .
任何人都知道在TensorFlow中可以执行哪些操作?
好的,我想出了一些有用的东西 . 但是,如果有人有更好的解决方案,请告诉我 .
def pairwise_euclidean_distance (input_layer): original_size = input_layer.get_shape().as_list() subtrahend = tf.pad(input_layer, [[0, 0], [1, 0], [0, 0], [0, 0]]) subtrahend = tf.slice(subtrahend, [0, 0, 0, 0], original_size) distance = tf.sqrt(tf.reduce_sum(tf.square(tf.subtract(input_layer, subtrahend)), axis=[2,3])) return distance
您可以简化距离计算,如下所示 . 因为两点之间矢量的L2范数是两者之间的距离 .
def distance(point1, point2): l2_norm = tf.norm(point1-point2, ord='euclidean') return l2_norm
2 回答
好的,我想出了一些有用的东西 . 但是,如果有人有更好的解决方案,请告诉我 .
您可以简化距离计算,如下所示 . 因为两点之间矢量的L2范数是两者之间的距离 .