scipy中squareform函数详解

函数格式

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中squareform函数详解_第1张图片

scipy转换结果如下:

环境不小心关了,之后补一张图吧~~

你可能感兴趣的:(大数据,python,机器学习)