专门做团购的网站,网站添加友情链接,mvc在网站开发中的应用,阿里云建站保证销售额pdist, squareform1.pdist, squareform使用例子2.通过矩阵的四则运算实现上述pdist, squareformscipy.spatial.distance 距离计算库中有两个函数#xff1a;pdist, squareform#xff0c;用于计算样本对之间的欧式距离#xff0c;并且将样本间距离用方阵表示出来。#xff…
pdist, squareform1.pdist, squareform使用例子2.通过矩阵的四则运算实现上述pdist, squareformscipy.spatial.distance 距离计算库中有两个函数pdist, squareform用于计算样本对之间的欧式距离并且将样本间距离用方阵表示出来。题外话 SciPy: 基于Numpy提供方法(函数库)直接计算结果封装了一些高阶抽象和物理模型 Numpy 来存储和处理大型矩阵比Python自身的嵌套列表nested list structure)结构要高效的多本身是由C语言开发。 Pandas: 基于NumPy 的一种工具该工具是为了解决数据分析任务而创建的。 参考 资料https://www.jianshu.com/p/32cb09d84487
回正题
1.pdist, squareform使用例子
pdist, squareform的操作基于numpy, import numpy as npfrom scipy.spatial.distance import pdist, squareformxnp.array([[1,1,1],[2,2,2],[4,4,4]]) #三个一维向量x1[1,1,1] x2[2,2,2],x3[4,4,4] Dispdist(x)Dis # d(x1,x2)sqrt(3)1.7 ,d(x1,x3)sqrt(27),d(x2,x3)sqrt(8)
array([1.73205081, 5.19615242, 3.46410162]) Dsquareform(Dis)
array([[0. , 1.73205081, 5.19615242], # d(x1,x1),d(x1,x2),d(x1,x3)[1.73205081, 0. , 3.46410162], # d(x2,x1),d(x2,x2),d(x2,x3)[5.19615242, 3.46410162, 0. ]]) # d(x3,x1),d(x3,x2),d(x3,x1)
因为距离度量具有对称性即d(x1,x2)d(x2,x1)d(x1,x2)d(x2,x1)d(x1,x2)d(x2,x1)所以上述矩阵为一个对称阵。
2.通过矩阵的四则运算实现上述pdist, squareform
有三个三维样本x1[1,1,1],x2[2,2,2]x3[4,4,4]样本之间距离的方阵为
D[d(x1,x1)d(x1,x2)d(x1,x3)d(x2,x1)d(x2,x2)d(x2,x3)d(x3,x1)d(x3,x2)d(x3,x3)]D\begin{bmatrix} d(x1,x1) d(x1,x2) d(x1,x3)\\ d(x2,x1) d(x2,x2) d(x2,x3)\\ d(x3,x1) d(x3,x2) d(x3,x3)\end{bmatrix} D⎣⎡d(x1,x1)d(x2,x1)d(x3,x1)d(x1,x2)d(x2,x2)d(x3,x2)d(x1,x3)d(x2,x3)d(x3,x3)⎦⎤
d(x,y)xxTyyT−2xyTd(x,y)xx^Tyy^T-2xy^Td(x,y)xxTyyT−2xyT
所以 D[x1x1Tx1x1T−2x1x1T,x1x1Tx2x2T−2x1x2T,x1x1Tx3x3T−2x1x3Tx2x2Tx1x1T−2x2x1T,x2x2Tx2x2T−2x2x1T,x2x2Tx3x3T−2x2x3Tx3x3Tx1x1T−2x3x1T,x3x3Tx2x2T−2x3x2T,x3x3Tx3x3T−2x3x3T]D\begin{bmatrix} x_1x_1^Tx_1x_1^T-2x_1x_1^T, x_1x_1^Tx_2x_2^T-2x_1x_2^T , x_1x_1^Tx_3x_3^T-2x_1x_3^T\\ x_2x_2^Tx_1x_1^T-2x_2x_1^T, x_2x_2^Tx_2x_2^T-2x_2x_1^T , x_2x_2^Tx_3x_3^T-2x_2x_3^T\\ x_3x_3^Tx_1x_1^T-2x_3x_1^T, x_3x_3^Tx_2x_2^T-2x_3x_2^T , x_3x_3^Tx_3x_3^T-2x_3x_3^T\end{bmatrix} D⎣⎡x1x1Tx1x1T−2x1x1T,x2x2Tx1x1T−2x2x1T,x3x3Tx1x1T−2x3x1T,x1x1Tx2x2T−2x1x2T,x2x2Tx2x2T−2x2x1T,x3x3Tx2x2T−2x3x2T,x1x1Tx3x3T−2x1x3Tx2x2Tx3x3T−2x2x3Tx3x3Tx3x3T−2x3x3T⎦⎤
[x1x1T,x1x1T,x1x1Tx2x2T,x2x2T,x2x2Tx3x3T,x3x3T,x3x3T][x1x1T,x1x1T,x1x1Tx2x2T,x2x2T,x2x2Tx3x3T,x3x3T,x3x3T]T−2[x1x1T,x1x2T,x1x3Tx2x1T,x2x1T,x2x3Tx3x1T,x3x2T,x3x3T]\begin{bmatrix} x_1x_1^T, x_1x_1^T , x_1x_1^T\\ x_2x_2^T, x_2x_2^T , x_2x_2^T\\ x_3x_3^T, x_3x_3^T , x_3x_3^T \end{bmatrix} \begin{bmatrix} x_1x_1^T, x_1x_1^T , x_1x_1^T\\ x_2x_2^T, x_2x_2^T , x_2x_2^T\\ x_3x_3^T, x_3x_3^T , x_3x_3^T \end{bmatrix}^T-2 \begin{bmatrix} x_1x_1^T, x_1x_2^T ,x_1x_3^T\\ x_2x_1^T, x_2x_1^T ,x_2x_3^T\\ x_3x_1^T, x_3x_2^T , x_3x_3^T\end{bmatrix} ⎣⎡x1x1T,x2x2T,x3x3T,x1x1T,x2x2T,x3x3T,x1x1Tx2x2Tx3x3T⎦⎤⎣⎡x1x1T,x2x2T,x3x3T,x1x1T,x2x2T,x3x3T,x1x1Tx2x2Tx3x3T⎦⎤T−2⎣⎡x1x1T,x2x1T,x3x1T,x1x2T,x2x1T,x3x2T,x1x3Tx2x3Tx3x3T⎦⎤
[x1x1T,x1x1T,x1x1Tx2x2T,x2x2T,x2x2Tx3x3T,x3x3T,x3x3T] \begin{bmatrix} x_1x_1^T, x_1x_1^T , x_1x_1^T\\ x_2x_2^T, x_2x_2^T , x_2x_2^T\\ x_3x_3^T, x_3x_3^T , x_3x_3^T \end{bmatrix} ⎣⎡x1x1T,x2x2T,x3x3T,x1x1T,x2x2T,x3x3T,x1x1Tx2x2Tx3x3T⎦⎤ 矩阵对应元素相乘行复制
[x1x1T,x1x2T,x1x3Tx2x1T,x2x1T,x2x3Tx3x1T,x3x2T,x3x3T][x1x2x3]∗[x1x2x3]T\begin{bmatrix} x_1x_1^T, x_1x_2^T ,x_1x_3^T\\ x_2x_1^T, x_2x_1^T ,x_2x_3^T\\ x_3x_1^T, x_3x_2^T , x_3x_3^T\end{bmatrix} \begin{bmatrix} x1\\ x2\\ x3\end{bmatrix}* \begin{bmatrix} x1\\ x2\\ x3\end{bmatrix}^T ⎣⎡x1x1T,x2x1T,x3x1T,x1x2T,x2x1T,x3x2T,x1x3Tx2x3Tx3x3T⎦⎤⎣⎡x1x2x3⎦⎤∗⎣⎡x1x2x3⎦⎤T
程序实现
Xnp.array([[1,1,1],[2,2,2],[3,3,3]])
X2(X*X).sum(1)*np.ones([3,3])
XXTnp.matmul(X,X.T)
DX2X2.T-2*XXT
Dnp.sqrt(D2)
print (D)# 输出
[[ 0. 1.73205081 5.19615242][ 1.73205081 0. 3.46410162][ 5.19615242 3.46410162 0. ]]**温馨提示**上述矩阵为距离矩阵在实际应用的过程中注意使用的是距离的平方还是距离。