计算矩阵间余弦相似度,无循环

矩阵v1:n\times k,可看作n个k维行向量

矩阵v2:k\times m,可看作m个k维列向量

计算v1的行向量和v2列向量的余弦相似度,无循环

根据余弦相似度公式,向量点乘除以模的乘积,拓展到矩阵间运算大致分为三步:

1. 矩阵点乘,得到矩阵m:n\times m

2. v1行方向求模得到m1:n\times 1,v2列方向求模得到m2:1\times m,m1与m2点乘得到矩阵denom:n\times m

3.  矩阵m/demom,对应位置除运算

如此即可矩阵运算得到行列向量间的余弦相似度,python代码如下:

def matrix_cos_similar(v1, v2):
    # v1.shape = (n,k), v2.shape = (m,k)
    v2 = np.array(v2).T
    #step1:矩阵点乘
    dot_matrix = np.dot(v1, v2) 
    #step2:v1行方向求模,v2列方向求模,结果点乘
    v1_row_norm = np.linalg.norm(v1, axis=1).reshape(-1,1)
    v2_col_norm = np.linalg.norm(v2,axis=0).reshape(1,-1)
  #  print(v1_row_norm.shape)
    norm_matrix = np.dot(v1_row_norm, v2_col_norm)
    #step3:对应位置做除法运算,相当于向量乘积/模的乘积
    res = dot_matrix / norm_matrix
    res[np.isneginf(res)] = 0
    return res

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值