【问题标题】:Tensorflow - Euclidean Distance of Points in MatrixTensorflow - 矩阵中点的欧几里得距离
【发布时间】:2017-06-19 16:34:01
【问题描述】:

我有一个 n*m 张量,它基本上代表 n 维欧几里得空间中的 m 个点。我想计算每个连续点之间的成对欧几里得距离。

也就是说,如果我的列向量是点a、b、c等,我要计算euc(a, b)、euc(b, c)等。

结果将是一个 m-1 长度的一维张量,每个成对欧几里得距离。

谁知道谁可以在 TensorFlow 中执行此操作?

【问题讨论】:

    标签: python tensorflow


    【解决方案1】:

    您可以简化距离计算,如下所示。 因为两点之间向量的L2范数就是两点之间的距离。

    def distance(point1, point2):
        l2_norm = tf.norm(point1-point2, ord='euclidean')
        return l2_norm
    

    【讨论】:

      【解决方案2】:

      好的,我想出了一些可行的方法。不过,如果有人有更好的解决方案,请告诉我。

      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
      

      【讨论】:

        【解决方案3】:

        定义一个函数来计算距离

        calc_distance = lambda f, g: tf.norm(f-g, axis=1, ord='euclidean')

        将你的 n*m 向量传递给函数,例如:

        P = tf.constant([[1, 2], [3, 4], [2, 1], [0, 2], [2, 3]], dtype=tf.float32)

        distances = calc_distance(P[:-1:], P[1::])

        print(distances)

        <tf.Tensor: shape=(4,), dtype=float32, numpy=array([2.8284273, 3.1622777, 2.2360682, 2.2360682], dtype=float32)>

        【讨论】:

          猜你喜欢
          • 2014-11-18
          • 2017-01-05
          • 1970-01-01
          • 2018-05-11
          • 2020-06-16
          • 2016-08-02
          • 1970-01-01
          • 2013-10-21
          • 2014-06-08
          相关资源
          最近更新 更多