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

如何在Matlab中计算embedding间余弦距离 含PyTorch tensor转.mat方法

PyTorch张量导出为.mat文件方法

直接用scipy的savemat接口即可完成转换,代码如下:

import torch
from scipy.io import savemat

# 假设你的原始张量为image_features,尺寸为 [200000, 512]
# 先将张量移到CPU、断开计算图后转numpy数组
image_features_np = image_features.detach().cpu().numpy()

# 导出为mat格式文件,字典的key对应Matlab中读取后的变量名
savemat("image_features.mat", {"image_features": image_features_np})

200000×512的单精度数组导出后的.mat文件约为400MB,导出过程无额外内存压力。

Matlab端余弦相似度计算实现

注意:200000个向量两两计算生成的全量相似度矩阵尺寸为200000×200000,单精度存储需要约149GB内存,普通消费级设备无法直接承载,若无全量矩阵需求,建议直接使用下方Top K近邻计算方案。

全量相似度矩阵计算(仅适用于大内存服务器)

你之前的PyTorch代码实际计算的是向量内积,若要得到标准余弦相似度,需要先对每个embedding做L2归一化再做矩阵乘,Matlab实现代码如下:

% 读取导出的mat文件
load('image_features.mat');

% 对每个行向量做L2归一化,若你的张量已提前完成归一化可跳过该行
norm_features = normalize(image_features, 2, 'norm');

% 矩阵乘法计算所有两两余弦相似度
similarity = norm_features * norm_features';

Top K相似结果计算(普通设备可用)

如果只需要每个embedding匹配前K个最相似的结果,不需要全量矩阵,可以直接调用Matlab内置的K近邻搜索接口,内存占用极低:

% 读取导出的mat文件
load('image_features.mat');

K = 10; % 自定义需要返回的Top K数量
% 基于余弦距离计算每个向量的Top K近邻,返回对应索引和余弦距离
[idx, cosine_distance] = knnsearch(image_features, image_features, 'K', K, 'Distance', 'cosine');
% 如需转换为余弦相似度,执行:cosine_similarity = 1 - cosine_distance;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 09:27:03