pytorch 笔记:dist 和 cdist

1 dist

1.1 基本使用方法

python 复制代码
torch.dist(input, other, p=2)

计算两个Tensor之间的p-范数

1.2 主要参数

|-------|---------|
| input | 输入张量 |
| other | 另一个输入张量 |
| p | 范数 |

input 和 other的形状需要是可广播的

1.3 举例

python 复制代码
import torch

x=torch.randn(4)
x
#tensor([ 1.2698, -0.1209,  0.0462, -1.3271])

y=torch.randn(4)
y
#tensor([ 0.6590, -0.8689, -1.0083,  0.5733])

torch.dist(x,y)
#tensor(2.3783)
python 复制代码
z=torch.randn((2,4))
z
'''
tensor([[-0.9118,  1.8019, -0.0162, -0.1969],
        [ 0.2998, -0.1147,  1.1427, -0.9425]])
'''

torch.dist(x,z)
#tensor(3.4683)

2 cdist

2.1 基本使用方法

python 复制代码
torch.cdist(x1, x2, p=2.0, compute_mode='use_mm_for_euclid_dist_if_necessary')

2.2 主要参数

|----------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| x1 | B × P × M大小的tensor |
| x2 | B × R × M 大小的tensor |
| p | 范数 |
| compute_mode | 指定计算欧几里得距离(p=2)时的方法。有三个选项: * use_mm_for_euclid_dist_if_necessary:如果 P > 25 或 R > 25,则使用矩阵乘法方法计算欧几里得距离。 * use_mm_for_euclid_dist:总是使用矩阵乘法方法计算欧几里得距离。 * donot_use_mm_for_euclid_dist:永不使用矩阵乘法方法计算欧几里得距离。 |

返回的大小是B × P × R

如果p∈(0,∞),那么这个方法和scipy.spatial.distance.cdist(input,'minkowski', p=p)是一样的

如果p=0,那么这个方法和scipy.spatial.distance.cdist(input,'hamming')是一样的

2.4 使用矩阵乘法速度变慢?

  • 如果数据集较大,或者你有访问高性能计算资源(如GPU),则使用 "use_mm_for_euclid_dist" 可能会更快。
  • 相反,如果数据集较小,或者你的计算资源有限(如只使用CPU),那么 "donot_use_mm_for_euclid_dist" 可能是更好的选择
python 复制代码
%%timeit
points1 = torch.rand((5120, 2))
points2 = torch.rand((5120, 2))
torch.cdist(points1, points2, p=2.0, compute_mode="donot_use_mm_for_euclid_dist")
#24 ms ± 4.54 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

%%timeit
points1 = torch.rand((5120, 2))
points2 = torch.rand((5120, 2))
torch.cdist(points1, points2, p=2.0)
#36.7 ms ± 2.68 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
相关推荐
wan5555cn35 分钟前
多张图片生成视频模型技术深度解析
人工智能·笔记·深度学习·算法·音视频
雁于飞2 小时前
vscode中使用git、githup的基操
笔记·git·vscode·学习·elasticsearch·gitee·github
rannn_1113 小时前
【Javaweb学习|实训总结|Week1】html基础,CSS(选择器、常用样式、盒子模型、弹性盒布局、CSS定位、动画),js(基本类型、运算符典例)
css·笔记·学习·html
Ro Jace3 小时前
心灵笔记:第一性原理学习与实践
笔记
aramae4 小时前
C++ -- 模板
开发语言·c++·笔记·其他
小马学嵌入式~5 小时前
嵌入式 SQLite 数据库开发笔记
linux·c语言·数据库·笔记·sql·学习·sqlite
hour_go5 小时前
用户态与内核态的深度解析:安全、效率与优化之道
笔记·操作系统
摇滚侠6 小时前
Vue3入门到实战,最新版vue3+TypeScript前端开发教程,笔记03
javascript·笔记·typescript
岑梓铭7 小时前
考研408《计算机组成原理》复习笔记,第六章(1)——总线概念
笔记·考研·408·计算机组成原理·计组
Suckerbin8 小时前
digitalworld.local: TORMENT
笔记·安全·web安全·网络安全