【机器学习实战】计算两个矩阵的成对距离(pair-wise distances)
矩阵中每一行是一个样本,计算两个矩阵样本之间的距离,即成对距离(pair-wise distances),可以采用 sklearn 或 scipy 中的函数,方便计算。
sklearn: sklearn.metrics.pairwise_distances
scipy: scipy.spatial.distance_matrix(用于 p-norm) 或 scipy.spatial.distance.cdist(所有常用距离 metrics)
比较三者的运行时间:(都计算欧式距离)
import numpy as np
from sklearn.metrics import pairwise_distances
from scipy.spatial import distance_matrix
from scipy.spatial.distance import cdist
# 10-dimensional features
x = np.random.rand(400000).reshape((-1, 10))
y = np.random.rand(45000).reshape((-1, 10))
def option1():
dists = pairwise_distances(x, y)
def option2():
dists = distance_matrix(x, y)
def option3():
dists = cdist(x, y)
使用 pycharm 在 console 里用 timeit 查看运行时间,可以发现 scipy 的 scipy.spatial.distance.cdist 函数运行时间最短,sklearn.metrics.pairwise_distances 次之,scipy.spatial.distance_matrix 运行时间最长。

sklearn 在运行时,pairwise_distances 会占用大量 CPU 资源,在 linux 服务器上跑,32 个 CPU 核会都占满,这是由于 pairwise_distances 并行造成的,生成的大量子进程会占满所有 CPU 资源,即使设置 n_jobs = 1,也会有 31 个子进程生成。可能的原因是并行的最大进程数自动设置成了 max(cpu_count() // effective_n_jobs, 1),详情请看 sklearn.utils.parallel_backend — scikit-learn 0.22。
scipy 的 cdist 函数又快,又没有 sklearn 的 pairwise_distances 占 CPU,计算成对距离,请用 scipy.spatial.distance.cdist。
References
sklearn.metrics.pairwise_distances -- scikit-learn
sklearn.utils.parallel_backend — scikit-learn 0.22
scipy.spatial.distance_matrix -- SciPy
scipy.spatial.distance.cdist -- SciPy
【机器学习实战】计算两个矩阵的成对距离(pair-wise distances)的更多相关文章
- NumPy之计算两个矩阵的成对平方欧氏距离
问题描述 设 \({X_{m \times k}} = \left[ {\vec x_1^T;\vec x_2^T; \cdots ;\vec x_m^T} \right]\) (; 表示纵向连接) ...
- python基础练习题(题目 计算两个矩阵相加)
day30 --------------------------------------------------------------- 实例044:矩阵相加 题目 计算两个矩阵相加. 分析:矩阵可 ...
- 计算两个GPS坐标点的距离
计算两个GPS坐标点的距离,第一个参数是第一个点的维度,第二个参数是第一个点的经度 http://yuninglovekefan.blog.sohu.com/235655696.html /** * ...
- PHP计算两组经纬度坐标之间的距离
定义π define('PI',3.1415926535898); define('EARTH_RADIUS',6378.137); 计算两组经纬度坐标 之间的距离 /** * 计算两组经纬度坐标 之 ...
- HTML5地理定位(已知经纬度,计算两个坐标点之间的距离)
事实上,地球上任意两个坐标点在地平线上的距离并不是直线,而是球面的弧线. 下面介绍如何利用正矢公式计算已知经纬度数据的两个坐标点之间的距离.半正矢公式也成为Haversine公式,它最早时航海学中的重 ...
- php计算两个经纬度地点之间的距离(转)
php计算两个指定的经纬度地点之间的距离,这个在做计算给定某个地点的经纬度,计算其附近的商业区,以及给定地点与附近各商业区之间的距离的时候,还是用的到的.下面是具体的函数代码以及用法示例. 关于如何获 ...
- 计算两个latitude-longitude点之间的距离? (Haversine公式)
问题描述 如何计算纬度和经度指定的两点之间的距离?为了澄清,我想要距离公里;这些点使用WGS84系统,我想了解可用方法的相对准确性.最佳解决方案 这个link可能对您有帮助,因为它详细说明了使用Hav ...
- java通过经纬度计算两个点的之间的距离的算法
通过两个点的经纬度计算距离 从google maps的脚本里扒了段代码,没准啥时会用上.大家一块看看是怎么算的. private const double EARTH_RADIUS = 6378.13 ...
- PHP计算两个经纬度地点之间的距离
/** * 求两个已知经纬度之间的距离,单位为米 * * @param lng1 $ ,lng2 经度 * @param lat1 $ ,lat2 纬度 * @return float 距 ...
随机推荐
- 前端vue实现pdf文件的在线预览
3.前端vue实现pdf文件的在线预览 我是通过 <iframe> 标签就可以满足我工作的 pdf预览需求 如果<iframe> 无法满足需求 , 可以使用pdf.js这个插件 ...
- 【Android - 自定义View】之View的位置参数
View是Android中所有控件的基类,不管是简单的Button和TextView,还是复杂的RelativeLayout和ListView,其基类都是View类:ViewGroup也继承了View ...
- python模块2
python模块2 相关概念 模块名是标识符(需要按照标识符的写法编写) Pyc文件 在使用模块的项目中会生成一个_pycache_文件,里面存放着编译过的(模块的)字节码缓存文件(因为模块一般很少有 ...
- $("#loginname").tips和jQuery中 的ajax
jquery tips 提示插件 jquery.tips.js v0.1beta: 使用方法 $("#loginname").tips({ //#loginname为jquery的 ...
- C# 中的委托和事件(一)
引言 委 托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真 是太容易了,而没有 ...
- powerline字体安装
安装命令 git clone https://github.com/powerline/fonts ./install.sh 了解powerline ->美化自己的命令行环境,增加漂亮的状态行, ...
- Spring Security OAuth2 Demo —— 授权码模式
本文可以转载,但请注明出处https://www.cnblogs.com/hellxz/p/oauth2_oauthcode_pattern.html 写在前边 在文章OAuth 2.0 概念及授权流 ...
- 如何编写可怕的Java代码?
我决定告诉你如何编写可怕的Java代码.如果你厌倦了所有这些美丽的设计模式和最佳实践,并且想写些疯狂的东西,请继续阅读. 如果你正在寻找有关如何编写良好代码的建议,请查看其它文章! 对一切使用异常 你 ...
- BOM对象中的常用方法
先看body中的内容: <body οnlοad="demo1()"> <p> <input type="button" id=& ...
- python优势之通过一段代码来了解python的强大之处
晚上闲暇之余随意翻了一下博客,看到https://www.jianshu.com/p/69bf0ed0b5cc作者提到了一段代码,刚开始看没啥感觉,仔细深入后引起了我的注意.里面使用了python最简 ...