计算矩阵A与矩阵B的欧式距离

  • 1. 从向量的欧式距离谈起
  • 2. 从向量的欧式距离扩展到矩阵的欧式距离

1. 从向量的欧式距离谈起

向量x为1x3的行向量,向量y为1x3的行向量,求向量x与向量y的欧式距离
x=(a11a12a13)x = \begin{pmatrix}a_{11} & a_{12} & a_{13}\\\end{pmatrix}x=(a11​​a12​​a13​​)
y=(b11b12b13)y = \begin{pmatrix}b_{11} & b_{12} & b_{13}\\\end{pmatrix}y=(b11​​b12​​b13​​)

distx,y=(a11−b11)2+(a12−b12)2+(a13−b13)2dist_{x,y}=\sqrt{(a_{11} - b_{11})^2 + (a_{12} - b_{12})^2 + (a_{13} - b_{13})^2}distx,y​=(a11​−b11​)2+(a12​−b12​)2+(a13​−b13​)2​

变形为:
distx,y=a112+a122+a132+b112+b122+b132−2a11b11−2a12b12−2a13b13dist_{x,y}=\sqrt{a_{11}^2 + a_{12}^2 + a_{13}^2 + b_{11}^2 + b_{12}^2 + b_{13}^2 - 2a_{11}b_{11} - 2a_{12}b_{12} - 2a_{13}b_{13} }distx,y​=a112​+a122​+a132​+b112​+b122​+b132​−2a11​b11​−2a12​b12​−2a13​b13​​

从变形后的公式我们可以看出相当于(a−b)2=a2+b2−2ab(a-b)^2=a^2+b^2-2ab(a−b)2=a2+b2−2ab

我们可以变形为下列计算(两个向量的L2范数):
distx,y=∥x−y∥2dist_{x,y}=\left \| x-y \right \|_2distx,y​=∥x−y∥2​
第一种方式

import numpy as npx = np.mat([1.0, 2.0, 3.0])
y = np.mat([4.0, 5.0, 6.0])dist = np.sqrt(np.sum(np.power(x - y, 2)))
print(dist)
# 5.196152422706632
dist = np.sqrt(np.power(x, 2).sum() + np.power(y, 2).sum() - 2 * np.dot(x, y.T)).sum()
print(dist)
# 5.196152422706632

2. 从向量的欧式距离扩展到矩阵的欧式距离

向量A为2x3的行向量,向量B为3x3的行向量,求向量A与向量B的欧式距离
A=(a1a2)=(a11a12a13a21a22a23)A = \begin{pmatrix} a_{1} \\ a_{2} \end{pmatrix} = \begin{pmatrix} a_{11} & a_{12} & a_{13}\\ a_{21} & a_{22} & a_{23} \end{pmatrix}A=(a1​a2​​)=(a11​a21​​a12​a22​​a13​a23​​)

B=(b1b2b3)=(b11b12b13b21b22b23b31b32b33)B = \begin{pmatrix} b_{1} \\ b_{2}\\ b_{3} \end{pmatrix} = \begin{pmatrix} b_{11} & b_{12} & b_{13}\\ b_{21} & b_{22} & b_{23}\\ b_{31} & b_{32} & b_{33} \end{pmatrix}B=⎝⎛​b1​b2​b3​​⎠⎞​=⎝⎛​b11​b21​b31​​b12​b22​b32​​b13​b23​b33​​⎠⎞​
矩阵A与矩阵B的欧式距离,会形成矩阵C,其维度为2x3
C=(c1c2)=(c11c12c13c21c22c23)C = \begin{pmatrix} c_{1} \\ c_{2} \end{pmatrix}= \begin{pmatrix} c_{11} & c_{12} & c_{13}\\ c_{21} & c_{22} & c_{23} \end{pmatrix}C=(c1​c2​​)=(c11​c21​​c12​c22​​c13​c23​​)

distc11=(a11−b11)2+(a12−b12)2+(a13−b13)2=∥a1−b1∥2dist_{c_{11}}=\sqrt{(a_{11} - b_{11})^2 + (a_{12} - b_{12})^2 + (a_{13} - b_{13})^2} = \left \| a_1-b_1 \right \|_2distc11​​=(a11​−b11​)2+(a12​−b12​)2+(a13​−b13​)2​=∥a1​−b1​∥2​
distc12=(a11−b21)2+(a12−b22)2+(a13−b23)2=∥a1−b2∥2dist_{c_{12}}=\sqrt{(a_{11} - b_{21})^2 + (a_{12} - b_{22})^2 + (a_{13} - b_{23})^2} = \left \| a_1-b_2 \right \|_2distc12​​=(a11​−b21​)2+(a12​−b22​)2+(a13​−b23​)2​=∥a1​−b2​∥2​
distc13=(a11−b31)2+(a12−b32)2+(a13−b33)2=∥a1−b3∥2dist_{c_{13}}=\sqrt{(a_{11} - b_{31})^2 + (a_{12} - b_{32})^2 + (a_{13} - b_{33})^2} = \left \| a_1-b_3 \right \|_2distc13​​=(a11​−b31​)2+(a12​−b32​)2+(a13​−b33​)2​=∥a1​−b3​∥2​

distc21=(a21−b11)2+(a22−b12)2+(a23−b13)2=∥a2−b1∥2dist_{c_{21}}=\sqrt{(a_{21} - b_{11})^2 + (a_{22} - b_{12})^2 + (a_{23} - b_{13})^2} = \left \| a_2-b_1 \right \|_2distc21​​=(a21​−b11​)2+(a22​−b12​)2+(a23​−b13​)2​=∥a2​−b1​∥2​
distc22=(a21−b21)2+(a22−b22)2+(a23−b23)2=∥a2−b2∥2dist_{c_{22}}=\sqrt{(a_{21} - b_{21})^2 + (a_{22} - b_{22})^2 + (a_{23} - b_{23})^2}= \left \| a_2-b_2 \right \|_2distc22​​=(a21​−b21​)2+(a22​−b22​)2+(a23​−b23​)2​=∥a2​−b2​∥2​
distc23=(a21−b31)2+(a22−b32)2+(a23−b33)2=∥a2−b3∥2dist_{c_{23}}=\sqrt{(a_{21} - b_{31})^2 + (a_{22} - b_{32})^2 + (a_{23} - b_{33})^2}= \left \| a_2-b_3 \right \|_2distc23​​=(a21​−b31​)2+(a22​−b32​)2+(a23​−b33​)2​=∥a2​−b3​∥2​

可以看出A中的每个行向量使用了3次(B的行数)和B中的每一行列向量使用了2次(A的行数):
参照向量的欧式距离计算,转化成
(a−b)2=a2+b2−2ab(a-b)^2=a^2+b^2-2ab(a−b)2=a2+b2−2ab
C=sum(A2,axis=1)∗ones((1,3))+ones((2,1))∗sum(B2,axis=1)T−2ABTC=sum(A^2, axis=1) * ones((1, 3)) + ones((2, 1)) * sum(B^2, axis=1)^T - 2AB^TC=sum(A2,axis=1)∗ones((1,3))+ones((2,1))∗sum(B2,axis=1)T−2ABT

# 矩阵欧式距离计算
# 矩阵计算方法
A = np.mat([[1.0, 2.0, 3.0], [2.0, 3.0, 4.0]])
B = np.mat([[3.0, 4.0, 5.0], [4.0, 5.0, 6.0], [5.0, 6.0, 7.0]])
C = np.sum(np.power(A, 2), 1) * np.ones((1, 3)) + np.ones((2, 1)) * np.sum(np.power(B, 2), 1).T        - 2 * A * B.T
print(C)
# [[12. 27. 48.] [ 3. 12. 27.]]# 逐行向量计算方法(用于验证)
C = np.mat(np.zeros((2, 3), dtype=float))
for i in range(2):for j in range(3):C[i, j] = np.sum(np.power(A[i] - B[j], 2))
print(C)#[[12. 27. 48.] [ 3. 12. 27.]]

计算矩阵A与矩阵B的欧式距离相关推荐

  1. 矩阵向量中两两间欧式距离计算

    目标:希望通过的矩阵运算就能得出矩阵向量中两两之间的欧式距离 欧氏距离公式: 一般而言,我们常见的欧式距离计算公式如下: a,b 对应的是两组不同的向量 dist(a,b)=(a1−b1)2+(a2− ...

  2. 计算两个矩阵的行向量之间的欧式距离

    1 问题描述 矩阵P的大小为[m, d]   用行向量表示为P1, P2,...,Pm 矩阵C的大小为[n, d]    用行向量表示为C1, C2,...,Cn 求矩阵P的每个行向量与矩阵C的每个行 ...

  3. Python中计算两个数据点之间的欧式距离,一个点到数据集中其他点的距离之和

    计算数两个数据点之间的欧式距离 import numpy as np def ed(m, n):return np.sqrt(np.sum((m - n) ** 2)) i = np.array([1 ...

  4. 多元统计分析——欧式距离和马氏距离

    在一元的情形中,定义两个点和之间的距离: 两者作差的绝对值,我们称为欧式距离. 经过标准化的作差绝对值,我们称为统计距离,或者标准化过后的距离.其中,代表样本的标准差. 在多元的情形中,假设我们有两个 ...

  5. 实现两个点集的欧式距离和cos距离和索引值寻找(含有两种解法,for循环和矩阵操作)

    一.计算欧式距离 1,直接for循环 两个点集points1,points2,用dist来存储距离 points1=np.array([[1,2],[3,4]]) points2 = np.array ...

  6. R语言计算曼哈顿距离(Manhattan Distance)实战:计算两个向量的曼哈顿距离、dist函数计算矩阵中两两元素的曼哈顿距离

    R语言计算曼哈顿距离(Manhattan Distance)实战:计算两个向量的曼哈顿距离.dist函数计算矩阵中两两元素的曼哈顿距离 目录 R语言计算曼哈顿距离(Manhattan Distance ...

  7. 分别用matlab和python计算物品相似度矩阵(Jaccard系数

    用户\物品 A B C D E 101 1 1 0 0 1 102 0 1 0 1 0 103 1 1 1 1 1 104 1 1 0 1 0 105 1 1 0 0 1 106 0 0 0 1 0 ...

  8. 『科学计算_理论』矩阵求导

    上篇原文链接 下篇原文链接 标量对矩阵求导 矩阵求导的技术,在统计学.控制论.机器学习等领域有广泛的应用.鉴于我看过的一些资料或言之不详.或繁乱无绪,本文来做个科普,分作两篇,上篇讲标量对矩阵的求导术 ...

  9. 中南大学 科学计算与MATLAB语言 矩阵的特征值与特征向量

    中南大学 科学计算与MATLAB语言 矩阵的特征值与特征向量 特征的几何意义 MATLAB提供一个eigshow()函数,能够将原始数据和伸缩变换后的数据椭圆. 稀疏矩阵 完全存储方式 稀疏存储方式

  10. 用计算机算3次根号0.00005,使用ORCA在TDDFT下计算旋轨耦合矩阵元和绘制旋轨耦合校正的UV-Vis光谱...

    使用ORCA在TDDFT下计算旋轨耦合矩阵元和绘制旋轨耦合校正的UV-Vis光谱 文/Sobereva@北京科音 First release: 2019-Feb-10  Last update: 20 ...

最新文章

  1. java phantomjs 2.1.1_Java之网络爬虫WebCollector2.1.2+selenium2.44+phantomjs2.1.1
  2. 机器学习的门槛再度降低,AI小白如何用5分钟搞定建模?
  3. 浏览器是怎样工作的(一):基础知识
  4. 运行shell脚本时报错[[ : not found解决方法
  5. 统计特性和概率估计-1 (数学推导与证明)
  6. 想一个颠覆性技术方向建议,你能想到什么?
  7. java 复选框怎么用_Java Swing公开课|Java Swing的复选框组件怎么用,看完这篇文章你一定就会了...
  8. python在json文件中查找指定数据_Python中json的取值 如何使用python提取json中指定字段的数据...
  9. redis 和 memcached的区别
  10. 雷达多普勒频率计算公式_脉冲工作(机载雷达导论---读书笔记)
  11. bus,device,driver三者关系
  12. 清华大学计算机系哪个专业就业前景最好,往年清华大学就业前景最好的专业
  13. 《算法设计与分析》黄宇编著 课后习题参考答案
  14. IDEA 插件开发 创建一个控制台窗口
  15. tomcat如何知道WebRoot是web根目录?
  16. Git Bash复制粘贴快捷键失效问题
  17. 程序员眼中的漫威!太有才了!
  18. Unexpected exception parsing XML document from class path resource处理
  19. 【NVCaffe源码分析】数据增量之batch_sampler
  20. 专享策略02 | 商品股指通用套利策略(一)

热门文章

  1. 怎么提高企业微信加人的通过率,让企业微信加更多客户?快速加人,引流拓客有什么技巧(企微运营干货)
  2. 2.2基本共射放大电路的工作原理
  3. 专业显卡测试软件 spec,AMD Radeon Pro WX8200专业图形显卡评测 对比Quadro P5000
  4. CCF CSP 数据中心 c++ python csp201812_4 100分
  5. 使用最小二乘法拟合曲线
  6. 腾讯测试发型的那个软件,全栈发型设计软件
  7. 基于PHP的留言板毕业论文,网络留言板
  8. 虚拟机VMware安装ubuntu教程
  9. 唯一索引(unique index)的创建和使用
  10. LeetCode 9 回文数 c语言