sklearn 笔记:neighbors.NearestNeighbors 自定义metric

1 数据

假设我们有这样的一个数据tst_lst,表示的是5条轨迹的墨卡托坐标,我们希望算出逐点的曼哈顿距离之和,作为两条轨迹的距离

[array([[11549759.51313693,   148744.89246911],[11549751.49813359,   148732.97804463],[11549757.62070558,   148738.21148336],[11549877.73443613,   148886.64075531],[11549855.1365795 ,   148900.67083319]]),array([[11556428.51911408,   145454.58226351],[11557035.91165162,   145493.83259114],[11557310.50343952,   145408.66217089],[11557748.16714946,   145339.9824732 ],[11558124.96136184,   145498.27539452]]),array([[11560299.60987809,   143642.48133694],[11560236.88134503,   143437.08940241],[11560254.26944949,   143331.75455279],[11560222.79942945,   143349.26953089],[11560224.0350758 ,   143354.70329418]]),array([[11559757.30584681,   143885.2194761 ],[11560304.02926187,   143639.87580025],[11560743.21804884,   143750.12120076],[11560626.52182665,   144103.28312704],[11560722.44583186,   144272.53199179]]),array([[11569978.06036478,   151723.38135785],[11569938.73118869,   151248.5811628 ],[11569616.11617246,   150791.67584703],[11569571.34347327,   150687.55191842],[11569688.57402901,   150674.10077112]])]

2 处理原始数据

2.1 直接喂入的问题

如果直接将上面的数据fit入NearestNeighbors,是会报错的:

from sklearn.neighbors import NearestNeighborscellKDtree=NearestNeighbors().fit(tst_lst)
cellKDtree
'''
ValueError: Found array with dim 3. NearestNeighbors expected <= 2.
'''

ValueError 是由于尝试在 NearestNeighbors 对象上使用三维数组导致的。NearestNeighbors 期望的输入是一个二维数组,其中每行代表一个数据点,每列代表一个特征

2.2 修改数据形状

每一个轨迹二维矩阵转化成一个一维向量

tst_lst=np.array(tst_lst)
tst_lst_new=[]for i in range(len(tst_lst)):tst_lst_new.append(np.hstack(tst_lst[i]).tolist())
tst_lst_new'''
[[11549759.513136925,148744.89246911363,11549751.49813359,148732.97804463338,11549757.620705582,148738.2114833576,11549877.734436132,148886.6407553058,11549855.136579504,148900.67083319122],[11556428.519114085,145454.58226351053,11557035.911651615,145493.83259113596,11557310.503439516,145408.66217089174,11557748.167149458,145339.9824731981,11558124.961361844,145498.2753945235],[11560299.609878086,143642.48133694328,11560236.881345032,143437.0894024146,11560254.269449493,143331.75455278732,11560222.79942945,143349.26953088713,11560224.035075797,143354.7032941798],[11559757.305846812,143885.21947610297,11560304.02926187,143639.8758002481,11560743.218048835,143750.12120075937,11560626.521826653,144103.28312704086,11560722.445831856,144272.53199179273],[11569978.060364777,151723.38135785353,11569938.731188687,151248.58116280191,11569616.116172463,150791.67584703089,11569571.343473272,150687.55191841844,11569688.57402901,150674.1007711226]]
'''

此时送入NearestNeighbor已经可以了

from sklearn.neighbors import NearestNeighborscellKDtree=NearestNeighbors().fit(tst_lst_new)
cellKDtree

3 自定义函数

from scipy.spatial.distance import *
import numpy as np
def disfunc(x,y):#每次比较fit入Nearest Neighbor 的矩阵的两行x_points=np.array([(x[i],x[i+1]) for i in range(0,len(x),2)])y_points=np.array([(y[i],y[i+1]) for i in range(0,len(y),2)])#提取经纬度,将每一行一维向量改成二维矩阵return float(np.sum(np.diag(cdist(x_points,y_points,metric='cityblock'))))'''cdist(x_points,y_points,metric='cityblock') 将得到一个二维矩阵,表示x每一个元素和y每一个元素的曼哈顿距离np.diag是取二维矩阵的对角元素,表示x和y对应位置元素的距离求和就是两条轨迹的距离'''

4 使用NearestNeighbor

注:似乎algorithm只能选择默认的brute,KD_tree和ball_tree都不行

from sklearn.neighbors import *cellKDtree=NearestNeighbors(metric=disfunc).fit(tst_lst_new)
cellKDtree

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/207123.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 常用命令汇总

1 linux定时任务 查看定时任务&#xff1a;crontab -l 每晚一点半执行定时任务&#xff1a; 30 1 * * * sh /var/lib/pgsql/pg_db_backup.sh >> /var/lib/pgsql/pg_db_backup.log 2>&1 配置定时任务&#xff1a;crontab -e 2 linux 内核版本查询 cat /etc/r…

P5744 【深基7.习9】培训

题目描述 某培训机构的学员有如下信息&#xff1a; 姓名&#xff08;字符串&#xff09;年龄&#xff08;周岁&#xff0c;整数&#xff09;去年 NOIP 成绩&#xff08;整数&#xff0c;且保证是 5 5 5 的倍数&#xff09; 经过为期一年的培训&#xff0c;所有同学的成绩都…

学习-java多线程

线程的创建 *继承Tread,重写run *实现Runnable接口,重写run() [匿名内部类] *实现callable接口(有结果返回) 线程的常用方法 调用join保证这个方法先执行完成, 线程安全 并发编程 进程&#xff1a;就相当一个程序的实例线程&#xff1a;就是指令流&#xff08;一个进程包含多…

无重复字符的最长子串-中等

leetcode地址 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1:输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。 示例 2:输入: s "bbbbb" 输出: 1 …

我有才打造私域流量的知识付费小程序平台

在当今数字化时代&#xff0c;知识付费市场正在迅速崛起&#xff0c;而私域流量的概念也日益受到重视。私域流量指的是企业通过自有渠道获取的、能够自由支配的流量&#xff0c;这种流量具有更高的用户粘性和转化率。因此&#xff0c;打造一个基于私域流量的知识付费小程序平台…

实现:切换页面切换标题,扩展 vue-router 的类型

布局容器-页面标题 网址&#xff1a;https://router.vuejs.org/zh/guide/advanced/meta 给每一个路由添加 元信息 数据 router/index.ts const router createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [{ path: /login, component: () > im…

问题:数组对象去重

问题&#xff1a;数组对象去重 var arr [{name: ‘a’,id: 1}, {name: ‘a’,id: 2}, {name: ‘b’,id: 3}, {name: ‘c’,id: 4}, {name: ‘c’,id: 6}, {name: ‘b’,id: 6}, {name: ‘d’,id: 7}]; 对数组对象name进行去重处理&#xff0c; 结果显示为&#xff1a; [{name…

第一启富金:新添澳大利亚(ASIC)牌照

第一启富金&#xff1a;澳大利亞證券及投資委員會&#xff08;ASIC&#xff09; GOLDWELL GLOBAL PTY LTD 是 WHOLESALE INVESTOR SERVICES PTY LTD&#xff08;CAR 編號 001304943&#xff09;的企業授權代表開發澳大利亞客戶&#xff0c;WHOLESALE INVESTOR SERVICES PTY LT…

XML是什么

XML是是什么&#xff1f; XML&#xff08;Extensible Markup Language&#xff09;&#xff0c;中文是可扩展标记语言&#xff0c;是标准通用标记语言的子集。它是一种标记语言&#xff0c;用于标记电子文档&#xff0c;使其结构化。 XML可以用来标记数据&#xff0c;定义数据…

【软件推荐】文本转语音,语音转wav,导入ue5

文字转语音 在线免费文字转语音 - TTSMaker官网 | 马克配音https://ttsmaker.cn/ 文件转换器 语音转wav Convertio — 文件转换器https://convertio.co/zh/

C#应用:MQTT分析——CONNECT为例子

源代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net.Sockets;namespace ConsoleApp1 {class Program{static void Main(string[] args){Connect();}/// <summary>/// 向…

HarmonyOS应用程序框架——UIAbility实操

UIAbility概述 UIAbility是一种包含用户界面的应用组件&#xff0c;主要用于和用户进行交互。UIAbility也是系统调度的单元&#xff0c;为应用提供窗口在其中绘制界面。 每一个UIAbility实例&#xff0c;都对应于一个最近任务列表中的任务。 一个应用可以有一个UIAbility&…

Leetcode—901.股票价格跨度【中等】

2023每日刷题&#xff08;五十二&#xff09; Leetcode—901.股票价格跨度 算法思想 实现代码 class StockSpanner { public:stack<pair<int, int>> st;int curday -1;StockSpanner() {st.emplace(-1, INT_MAX);}int next(int price) {while(price > st.top(…

油猴(Tampermonkey)浏览器插件简单自定义脚本开发

介绍 浏览器插件&#xff0c;包括油猴插件和其他插件&#xff0c;通过它们可以实现浏览器网页的定制化与功能增强。 其他插件一般只有某种具体的功能&#xff0c;且已经写死而不能更改&#xff0c;比如Adblock插件只用于去广告。 油猴插件是一款用于管理用户脚本的插件&…

使用Rust 构建C 组件

协议解析&#xff0c;这不就很快了&#xff0c;而且原生的标准库红黑树和avl 树支持&#xff0c;异步tokio 这些库&#xff0c;编写应用组件就很快了 rust 标准库不支持 unix 的消息队列&#xff0c;但是支持 shm 和 uds&#xff0c;后者从多方面考虑都比&#xff0c;消息队列更…

教育类直播介绍

教育类直播是一种在线教育形式&#xff0c;它允许学生和教师通过实时视频通话进行互动学习。这种学习方式可以为学生提供更灵活的学习时间和地点&#xff0c;同时也可以帮助教师更好地与学生进行互动和指导。 在教育类直播中&#xff0c;学生可以通过网络与教师和其他学生进行…

c/c++中一些不常用但有用的知识

1.变长数组 bool fun(int cnt) {unsigned char data[cnt];return true; } 在 C 语言中&#xff0c;变长数组&#xff08;Variable Length Arrays&#xff0c;VLA&#xff09;是 C99 标准引入的特性&#xff0c;允许使用变量来定义数组的长度。因此&#xff0c;在 C 版本的代码…

快速在VMware虚拟机上运行Kali Linux(保姆级教程)

本期将演示如何在VMware虚拟机上快速、轻松地安装Kali Linux。Kali Linux是一款专为渗透测试和网络安全而设计的操作系统&#xff0c;拥有很多强大的工具和功能。 在运行任何虚拟机之前&#xff0c;一定要先确保已经打开主板BIOS上的虚拟化支持。 下载VMware 接着来到vmware的…

vue 一直运行 /sockjs-node/info?及 /sockjs-node/info报错解决办法

sockjs-node介绍 sockjs-node 是一个JavaScript库&#xff0c;提供跨浏览器JavaScript的API&#xff0c;创建了一个低延迟、全双工的浏览器和web服务器之间通信通道。 服务端&#xff1a;sockjs-node&#xff08;https://github.com/sockjs/sockjs-node&#xff09; 客户端&a…

[全志Tina/Linux]全志修改bootlogo分区数据从而修改bootlogo

一、需求 在不进行镜像烧录的情况下&#xff0c;通过启动项或脚本将已存在于主板的bootlogo文件更新到bootlogo分区中&#xff0c;从而实现bootlogo的更新 二、操作 1、在主板上查找bootlogo文件路径 find -name bootlogo* 实机效果&#xff1a; 2、进入文件夹路径 cd ./d…