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
如果输入的是简洁的距离矩阵,将返回冗余矩阵;
如果输入的是冗余的距离矩阵,将返回简洁的距离矩阵。

距离矩阵

 abcdef
a0184222177216231
b184045123128200
c222450129121203
d17712312904683
e21612812146083
f23120020383830

矩阵存储

回到squareform函数,距离矩阵转换为向量的过程可以成为压缩存储的过程。跟稀疏矩阵的压缩存储原理基本一致,有兴许的同学,可以google下Compressed Row Storage (CRS)。

矩阵转换为向量的过程:
1. 主对角线的值都为0,不存储
2. 只存储下三角矩阵的值
3. 根据下图所示,按照逐行扫描的方法,依次找到下三角矩阵的距离值。

这里写图片描述

scipy转换结果如下:

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

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值