pytorch 矩阵运算巧求点之间的距离

【pytorch】FID讲解以及pytorch实现 FID,pytorch,pytorch_fid 阅读详情

给一些点的坐标(x1, y1), (x2, y2) … ,N个点,如果求它们中每个点到其他所有点的距离,
首先能想到的办法就是两层for循环,时间复杂度是O(N2)

而矩阵运算是经过优化的,一般来说比for循环要快。
现举例说明如何用矩阵运算来计算每个点到其他所有点的距离。

现有3个点

>>> c = torch.Tensor([[1,2], [2,3],[2,4]])
>>> c
tensor([[1., 2.],
        [2., 3.],
        [2., 4.]])
>>> c.shape 
torch.Size([3, 2])

这时分别在dim=0, dim=1上增加一个维度

>>> c1 = torch.unsqueeze(c, dim=1)
>>> c1.shape
torch.Size([3, 1, 2])
>>> c2 = c[None, ...]
>>> c2.shape
torch.Size([1, 3, 2])

用c1 - c2看会得到什么

>>> c1 - c2
tensor([[[ 0.,  0.],
         [-1., -1.],
         [-1., -2.]],

        [[ 1.,  1.],
         [ 0.,  0.],
         [ 0., -1.]],

        [[ 1.,  2.],
         [ 0.,  1.],
         [ 0.,  0.]]])

我们知道,python有broadcast功能,c1为[1,3,2], c2为[3,1,2], 相减时c1的dim=0维度会用同样的数据复制3次,变为[3,3,2],
c2的dim=1维度也会复制3次变为[3,3,2]。
那么相减就是shape为[3,3,2]。
可看到结果为每个点的(x, y) 减去其他所有点的(x, y)。

而求距离时希望差值的(x, y)求平方和,也就是x2+y2,
对最里面的维度求平方和,也就是[3,3,2]的最后一个维度2求平方和。

>>> torch.sum((c1 - c2)**2, dim=-1)
tensor([[0., 2., 5.],
        [2., 0., 1.],
        [5., 1., 0.]])

按列看,可看到每一列就是方才c1 - c2中每个差值(x, y)的x2+y2
最后开根号即可。

>>> torch.sum((c1 - c2)**2, dim=-1) ** 0.5
tensor([[0.0000, 1.4142, 2.2361],
        [1.4142, 0.0000, 1.0000],
        [2.2361, 1.0000, 0.0000]])
多维欧氏距离 余弦相似度 余弦距离 向量求模(范数)计算 pytorch实现 https://blog.youkuaiyun.com/weixin_41811314/article/details/121786787 阅读详情

相关推荐

pytorch 内积 点乘 矩阵乘法 余弦相似度

pytorch 内积 点乘 矩阵乘法 相似度

jacke121的专栏 2538

python广播机制(计算一个数组中所有点之间的距离)

python广播机制(计算一个数组中所有点之间的距离)

ykn37的博客 647

Python中如何利用经纬度进行距离计算

前些天由于工作中需求,要计算经纬度之间的距离,当我去网上搜索距离计算的方法时,发现很多文章中的方法乍一看都是很不同的,同是进行距离计算,为啥这么不一样呢?后来才发现问题在于很多文章没有进行相关的原理说明,直接上了一段代码,让人看了云里雾里的。 其实经纬度属于球面坐标,而我们常规的距离是在平面维度上的,因此,在进行距离计算之前,首先需将球面坐标转换为平面坐标,这样之后才能进行平面距离的测算,计算出来的距离单位就是米了,符合我们的常规认知。(我之前查到的一些方法中,有些是直接调包,有些是十进制和弧度互相做转换,初次接触时可能不是那么好理解背后原理) 以下是亲身实践后,总结的一些可行的计算方法。 一

pytorch 计算点集内或矩阵内两两元素之间的距离矩阵

前言:时间紧可直接看4,5两条。 1. 这一功能在python内或numpy内有现成的工具包 from scipy.spatial import distance # 以下两种方式视情况选择 scipy.spatial.distance.pdist() scipy.spatial.distance.cdist() 在神经网络的训练过程中,应用以上工具包需要把torch.tensor转变成numpy格式再计算,存在两个缺点:一是耗时,格式变来变去,而且从GPU迁移到CPU再返回到GPU;二是会造成梯度

wzg2016的博客 8193

从实验室到生活:构建一份全面的手机相机主观画质评测指南

本文详细介绍了如何从实验室数据转向实际体验,构建全面的手机相机主观画质评测指南。通过基础装备清单、室内外场景实战评测及数据之外的感知艺术,帮助用户发现手机相机在色彩还原、动态范围和夜景模式等方面的真实表现。特别关注主观体验与客观参数的差异,提供实用的评测技巧和报告撰写心法。

weixin_30940783的博客 308

保姆级教程:用vxe-grid给管理后台加个「智能筛选」功能(支持模糊搜索/多选/范围查询)

本文提供了一份详细的Vxe-Grid智能筛选功能实现教程。通过自定义筛选器渲染,文章逐步指导开发者为后台管理系统添加支持模糊搜索、多选下拉和数值范围查询的智能筛选功能,并分享了性能优化与移动端适配等实战经验。

weixin_29021291的博客 534

python 求各种距离公式(numpy矩阵)

导入必要库 : from scipy.spatial.distance import pdist, squareform 一、距离计算(压缩成一维的) 1、欧式距离 计算数组矩阵 X 样本之间的欧式距离,返回值为 Y 为压缩距离元组或矩阵(以下等同) X = pdist(X, 'euclidean') 2、明氏距离 X = pdist(X, 'minkowski', p) 3、曼哈顿距离 Y = pdist(X, 'cityblock') 4、标准化欧式距离 ...

知识搬运者 9064

433MHz无线通信避坑指南:如何解决信号干扰和误码问题

本文深入探讨433MHz无线通信中的信号干扰和误码问题,提供从射频前端设计到协议优化的全链路解决方案。通过天线匹配、电源噪声抑制、曼彻斯特编码改进及实时频点切换等技术,显著提升通信稳定性和距离。适合智能家居和工业无线控制系统的开发者参考。

weixin_29288313的博客 415

Python计算一个点到所有点的欧式距离

distances = np.sqrt(np.sum(np.asarray(airportPosition - x_vals)**2, axis=1))airportPosition是矩阵中的某一个点x_vals是矩阵中所有的点distances是某一个点到所有点的距离矩阵

Tan_HandSome的博客 1万+

梦幻西游端游脚本开发实战:从易语言到大漠多线程全解析

本文详细解析了梦幻西游端游脚本开发的全流程,从易语言基础入门到大漠插件多线程实战。重点介绍了易语言中文编程优势、大漠插件图色识别技术,以及多线程控制台开发技巧,帮助开发者高效实现游戏自动化,提升脚本稳定性和执行效率。

weixin_29251567的博客 1059

用 AI 设计力打造专业 UI_UX:在 Trea、Qoder 等 AI IDE 中集成 ui-ux-pro-max-skill

的核心是知识库Trea 和 Qoder 虽未被--ai all原生支持,但完全可通过@folder手动集成使用后,你的 AI 生成代码将从“功能可用”跃升至“设计专业”这是零成本提升产品质感的最佳实践之一🎨好的 UI 不应是设计师的专利,而是每个开发者的默认能力。然后在 Trea 或 Qoder 中输入—— 让 AI 成为你最懂设计的结对编程伙伴。

lpfasd123的博客 7097

矩阵之间欧式距离的快捷计算方法(无循环)

最近工作中需要用到矩阵中各个样本之间欧氏距离,因此记录一下,如何简便快捷地进行tensor间欧氏距离的计算(使用Pytorch框架)。 按照我之前的想法,会进行两轮或者一轮循环一个个地求出样本间的欧氏距离,但是看过了michuanhaohao/reid-strong-baseline中Euclidean_dist()方法的运算之后才发现了新大陆---------通过矩阵的方式快速的进行计算。 ...

IT_forlearn的博客 1万+

Arduino I2C for TCA9548A应答扫描程序

Arduino I2C for TCA9548A应答扫描程序

perseverance51博客 1119

用pytorch实现两个矩阵之间的距离运算

说明: a向量有m个点,b向量有n个点,计算a中每一个点与b中所有点的距离,并用阈值筛选出大于某个值的个数,求平均值 debug 用pytorch进行矩阵运算时出现如下错误,原因是索引超出范围 lymph_num += len(dist[dist < 500])#代码行 RuntimeError: CUDA error: device-side assert triggered CUDA kernel errors might be asynchronously reported at some

码到功成的博客 1171

企业财务共享服务中心业务蓝图规划方案【附全文阅读】

《企业财务共享服务中心业务蓝图规划方案》为集团企业提供财务共享中心建设全流程指导,涵盖战略定位、组织架构、业务流程、信息系统、运营管理和变革实施六大维度。方案明确共享中心"交易处理+战略支撑"双重职能,设计专业分组架构,筛选标准化高、价值明确的流程(如核算、资金结算等)纳入共享范围,构建业财一体化平台,并配套绩效与风险管控体系。结合项目型企业管理特点,分阶段推进实施,助力企业实现财务集中化与标准化转型。

cdfunlove的博客 994

Ollama + OpenCLAW 在 Windows 系统的完整部署指南

Windows 部署优先选 WSL2,避免原生环境的权限/兼容性问题;网络问题通过“离线包+国内镜像”解决,版本问题通过升级 Node.js 解决;内存不足可切换轻量模型或增大 WSL2 内存分配;核心链路:Ollama(模型管理)→ Gateway(网关)→ OpenCLAW TUI(交互),各组件启动正常即可稳定使用。

lpfasd123的博客 2824

PyTorch 实战:计算 Wasserstein 距离

(给Python开发者加星标,提升Python技能)编译:机器之心,作者:Daniel Daza最优传输理论及 Wasserstein 距离是很多读者都希望了解的基础,...

Python开发者 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

PointNet++函数square_distance(src, dst):计算两组点之间的欧式距离(代码详解)

张量,函数返回每对源点和目标点之间的欧氏距离的平方,形状为 [B, N, M]:获取输入源点和目标点的形状信息,其中 B 表示批量大小,N 表示源点的数量。:计算了源点和目标点的平方和,并将其广播到与 dist 相同的形状。:将这些平方和加到 dist 上,以完成欧氏距离的计算。:M 表示目标点的数量,C 表示每个点的维度。:这一步计算了两组点之间的叉乘积。计算欧式距离的平方等价于下方等式。假设有两组点,分别是。

qq_38473254的博客 1307

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

快速计算矩阵之间的欧式距离

记矩阵 AAA 大小为 M×DM\times DM×D,矩阵 BBB 大小为 N×DN\times DN×D,A=[a⃗1,a⃗2⋯a⃗m]A=[\vec a_1,\vec a_2\cdots\vec a_m]A=[a1​,a2​⋯am​],B=[b⃗1,b⃗2⋯b⃗n]B=[\vec b_1,\vec b_2\cdots\vec b_n]B=[b1​,b2​⋯bn​] 现在要计算 AAA 中每个向量 a⃗i\vec a_iai​ 与 BBB 中每个向量 b⃗j\vec b_jbj​ 之间的欧式距离,最朴素

大家好~我是SP_FA~ 1565

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

pytorch中计算两点之间的距离

pytorch中计算两点之间的距离

weixin_42837225的博客 3942

pytorch 欧式距离、余弦距离 矩阵运算

目录 一、 欧式距离 二、余玄距离 输入数据为张量类型的矩阵向量 一、 欧式距离 import torch # 数据 a = [[1,1,2.5], [2.8,7.5,5.4], [2.5,9.2,3.8], [2.5,3.2,3.5]] c = torch.tensor(a) # 方法一:该方法较为准确 X = torch.norm(c[:, None]-c, dim=2, p=2) print(X) # 输出 tensor([[0.0000, 7.

知识搬运者 4173

矩阵之间欧式距离的快捷计算方法

最近工作中需要用到矩阵中各个样本之间欧氏距离,因此记录一下,如何简便快捷地进行tensor间欧氏距离的计算(使用Pytorch框架)。 按照我之前的想法,会进行两轮或者一轮循环一个个地求出样本间的欧氏距离,但是看过了michuanhaohao/reid-strong-baseline中Euclidean_dist()方法的运算之后才发现了新大陆---------通过矩阵的方式快速的进行计算。 一、理论分析 首先从理论上介绍 一下,矩阵之间欧氏距离的快速计算,参考了@frankzd...

qq_35985044的博客 4624

pytorch cuda 欧式距离 矩阵运算

输入为tensor矩阵向量 欧式距离 def get_elu_dis(data): return torch.sqrt((-2*data.mm(data.t()))+torch.sum(torch.square(data),axis=1,keepdim=True)+torch.sum(torch.square(data.t()),axis=0,keepdim=True)) 余玄距离 def get_cos_dis(sentences_vec): sentences_vec = senten

My Honor! My World! 3437

pytorch embedding两两之间的欧式距离

embedding两两之间的欧氏距离 def compute_D(embeddings): t1 = embeddings.unsqueeze(1).expand(len(embeddings), len(embeddings), embeddings.shape[1]) t2 = embeddings.unsqueeze(0).expand(len(embeddings), len(embeddings), embeddings.shape[1])

weixin_42764932的博客 4832

矢量化计算样本集两两之间的欧氏距离

Notes 给定样本集 X=(x1,…,xn)X=(x_1,\dots,x_n)X=(x1​,…,xn​),求它们两两之间的距离,即距离矩阵 Dij=d(i,j)D_{ij}=d(i,j)Dij​=d(i,j)。 d(⋅,⋅)d(\cdot,\cdot)d(⋅,⋅) 表示某种距离,常用两种: cosine 距离:1−xTy∥x∥⋅∥y∥1-\frac{x^Ty}{\parallel x\para...

iTom's blog 2165
上一篇: np.where说明
下一篇: torch.where 与 np.where
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值