函数格式
scipy.spatial.distance.squareform(X, force=’no’, checks=True)
函数定义
Converts a vector-form distance vector to a square-form distance matrix, and vice-versa.
解释
用来把一个向量格式的距离向量转换成一个方阵格式的距离矩阵,反之亦然。
函数参数
-
X: 类型是ndarray
-
官网上说是
Either a condensed or redundant distance matrix. 谁知道这里说的简洁或者冗余距离矩阵是什么鬼?答案揭晓,我知道:首先输入如果是矩阵的话必须是距离矩阵,距离矩阵的特点是
1. d*d的对称矩阵,这里d表示点的个数;
2. 对称矩阵的主对角线都是0;
另外,如果输入的是距离向量的话,必须满足d * (d-1) / 2.
force: 类型是str,可选
- 强制做’tovector’ 或者’tomatrix’的转换 checks: 类型是bool, 可选
- 如果是false,将不会进行对阵的对称性和0对角线的检查。
函数返回值
Y:类型是ndarray
如果输入的是简洁的距离矩阵,将返回冗余矩阵;
如果输入的是冗余的距离矩阵,将返回简洁的距离矩阵。
距离矩阵
a | b | c | d | e | f | |
---|---|---|---|---|---|---|
a | 0 | 184 | 222 | 177 | 216 | 231 |
b | 184 | 0 | 45 | 123 | 128 | 200 |
c | 222 | 45 | 0 | 129 | 121 | 203 |
d | 177 | 123 | 129 | 0 | 46 | 83 |
e | 216 | 128 | 121 | 46 | 0 | 83 |
f | 231 | 200 | 203 | 83 | 83 | 0 |
矩阵存储
回到squareform函数,距离矩阵转换为向量的过程可以成为压缩存储的过程。跟稀疏矩阵的压缩存储原理基本一致,有兴许的同学,可以google下Compressed Row Storage (CRS)。
矩阵转换为向量的过程:
1. 主对角线的值都为0,不存储
2. 只存储下三角矩阵的值
3. 根据下图所示,按照逐行扫描的方法,依次找到下三角矩阵的距离值。
scipy转换结果如下:
环境不小心关了,之后补一张图吧~~