小编Har*_*dis的帖子

如何计算2D矩阵之间的距离

你好社区,

我是网站的新成员(作为会员),所以如果您认为在http://datascience.stackexchange.com上发布它可能会更好,请告诉我.

我正在解决机器学习问题,该问题需要计算NxM维元素之间的距离,以便实现某些分类算法.

元素的属性是2D矩阵(Matr),因此我正在寻找最佳算法来计算2D矩阵之间的距离.正如您将看到的那样,"简单"解决方案是将2D转换为1D(矢量),然后实现任何距离算法,但我正在寻找更方便的东西(如果存在).

到目前为止,我使用了以下方法:

  1. 每个元素之间的欧几里德距离.

    import numpy as np
    def dist_euclidean(elem1, elem2):
        t_sum=0
        for i in range(len(elem1.Matr)):
            for j in range(len(elem1.Matr[0])):
                t_sum+= np.square(elem1.Matr[i][j]-elem2.Matr[i][j])
        return np.sqrt(t_sum)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 余弦相似性,其中我必须将(NxM)2D矩阵转换为(1xNM)向量.

    from scipy.spatial import distance
    def dist_cosine(elem1, elem2):
        temp1=[]
        temp2=[]
        for i in range(len(elem1.Matr)):
            temp1.extend(elem1.Matr[i])
            temp2.extend(elem2.Matr[i])
        return distance.cosine(temp1, temp2)
    
    Run Code Online (Sandbox Code Playgroud)
  3. KL分歧(wiki),也发现仅针对1D矩阵(Vector)实现,因此进行了以下转换:

    • 找到每个相应行之间的熵,然后平均它们.

      import numpy as np
      from scipy.stats import entropy
      def dist_KL_row_avg(elem1, elem2):
          Y=[]
          for i in range(len(elem1.Matr)):
              Y.append(entropy(elem1.Matr[i], elem2.Matr[i]))
          return np.average(Y)
      
      Run Code Online (Sandbox Code Playgroud)
    • 通过附加行然后计算总熵将(NxM)2D矩阵转换为(1xNM)向量.

      import numpy as np
      from scipy.stats …
      Run Code Online (Sandbox Code Playgroud)

python algorithm machine-learning distance matrix

6
推荐指数
1
解决办法
910
查看次数

标签 统计

algorithm ×1

distance ×1

machine-learning ×1

matrix ×1

python ×1