IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> K近邻算法 (KNN)和最远点采样(FPS)实现--python+pytorch -> 正文阅读

[Python知识库]K近邻算法 (KNN)和最远点采样(FPS)实现--python+pytorch

KNN算法实现--python+pytorch

K近邻算法 (KNN)

主要思路:计算每个点和某点的距离,取距离最短的K个点的下标即可。
下面是个完整示例,代码复制即可运行

import torch
import time

#生成点集
def coordinate_gen(n):
    """
    生成n个三位点
    return tensor
    dim:n*3
    """
    xyz = torch.rand(size=(n,3))
    return xyz

#计算运行时间
def time_cost(f):

    def run_time(*args,**kwargs):
        start = time.time()
        res = f(*args,**kwargs)
        run_times = time.time()-start
        print("程序执行时间:%.6f s"%(run_times))
        return res

    return run_time

@time_cost
def knn(xyz,xyzs,k=3):
    """
    xyz:key point
    xyzs:all points
    找某点的k近邻个点
    return 近邻点的下标列表
    """
    idx = [0]*k
    distance = torch.sum((xyzs[:,:3]-xyz[:,:3])**2,dim=-1)
    for i in range(k):
        idx[i] = torch.argmin(distance,dim=0)
        distance[int(torch.argmin(distance,dim=0))] = float('inf')
    idx = [int(i) for i in idx]
    return idx

if __name__ == "__main__":
    print('-' * 20, '测试开始', '-' * 20)
    N,k = map(int,input("输入生成点数 和 k的值:").split())
    xyzs = coordinate_gen(N)
    xyz = torch.rand(size=(1,3))
    print("生成的点如下:\n",xyzs,"\n随机生成key point:",xyz)
    print(knn(xyz,xyzs=xyzs,k=k))
    print('-'*20,'测试结束','-'*20)

最远点采样(FPS)

def farthest_point_sample(data,npoints):
    """
    Args:
        data:输入的tensor张量,排列顺序 N,D
        Npoints: 需要的采样点

    Returns:data->采样点集组成的tensor,每行是一个采样点
    """
    N,D = data.shape #N是点数,D是维度
    xyz = data[:,:3] #只需要坐标
    centroids = torch.zeros(size=(npoints,)) #最终的采样点index
    dictance = torch.ones(size=(N,))*1e10 #距离列表,一开始设置的足够大,保证第一轮肯定能更新dictance
    farthest = torch.randint(low=0,high=N,size=(1,)) #随机选一个采样点的index
    for i in range(npoints):
        centroids[i] = farthest
        centroid = xyz[farthest,:]
        dict = ((xyz-centroid)**2).sum(dim=-1)
        mask = dict < dictance
        dictance[mask] = dict[mask]
        farthest = torch.argmax(dictance,dim=-1)
    print(centroids.type(torch.long))
    data= data[centroids.type(torch.long)]
    return data
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-03-22 20:32:47  更:2022-03-22 20:35:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 21:03:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码