python 求一个矩阵的距离矩阵的方法:

例:有行向量矩阵Matrix,维度为(n行,d特征长)。我们要求个点之间的距离并构成一个(n,n)距离矩阵,方法如下:

主要用到:

np.square(),

np.add(a,b), #若b为行向量,将b加到前面的每一行上;若b为列向量,将b加到前面的每一列上

np.sum(a,1) #1:按列加,0:按行加

我们有

(a - b)^2 = a^2 + b^2 - 2*a*b;

import numpy as np

def calculate_dis(x):
    sum_x = np.sum(np.square(x),1)#先求对应元素的平方,然后按列相加,得到(n,1)列向量
    
dist = np.add(np.add(-2*np.dot(x,x.T),sum_x),sum_x.T)#np.dot()函数是向量的点乘,np.add()函数是将sum_x的转置行向量依次加到前面的(n,n)向量的每一行上。按行加 
    或
    dist = np.add(np.add(-2*np.dot(x,x.T),sum_x).T,sum_x)#np.dot()函数是向量的点乘,np.add()函数是将sum_x列向量依次加到前面的(n,n)向量的每一列上。按列加
   
    return dist

举个例子:

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值