You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PyTorch高效计算k[i][j] = exp( -(a[i]-b[j])² )形式的协方差矩阵?

PyTorch高效实现方案

你可以直接利用PyTorch的广播机制实现和NumPy版本完全等价的向量化运算,完全避免Python层的循环,代码如下:

import torch

# 假设a是形状为(N,)的一维张量,b是形状为(M,)的一维张量
r = a[:, None] - b[None, :]  # 广播后形状为(N, M),每个元素为a[i]-b[j]
k = torch.exp(-r ** 2)

如果需要完全对齐NumPy的subtract.outer写法,PyTorch 1.13及以上版本也支持torch.subtract.outer接口,直接写也可以:

import torch

r = torch.subtract.outer(a, b)
k = torch.exp(-r * r)

性能说明

你之前的双循环版本慢的核心原因是所有运算都在Python层逐元素执行,无法利用PyTorch底层的向量化优化、多CPU并行以及GPU加速能力。上述向量化实现的运算逻辑完全在PyTorch底层执行,性能和NumPy版本基本持平,如果将张量迁移到GPU上运行,速度会远超过NumPy的CPU版本。
如果后续需要处理批量的高维张量计算核矩阵,只要对上述广播逻辑做对应维度调整即可,不需要修改核心运算逻辑。

内容的提问来源于stack exchange,提问作者kkk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 16:24:01