张量基本运算

一、计算的核心

和离散数学中 矩阵计算类似。

维度匹配前提:仅当矩阵A(m×n)的列数n = 矩阵B(n×p)的行数n,二者可相乘;结果矩阵C维度为m×p(A的行数×B的列数)。

例如A(4×512) × B(512×4) → C(4×4)

元素计算逻辑:结果Cij = A第i行与B第j列,对应元素相乘后求和,公式:

Cij = Σ(k=0到n-1)Aik × Bkj

关键性质:不满足交换律(A×B≠B×A),满足结合律((A×B)×C=A×(B×C))。

二、代码

复制代码
std::vector<std::vector<float>> manual_matrix_multiply(
    const std::vector<std::vector<float>>& A,
    const std::vector<std::vector<float>>& B) {
    int m = A.size();
    int n = A[0].size();
    int p = B[0].size();

    std::vector<std::vector<float>> C(m, std::vector<float>(p, 0.0f));

    for (int i = 0; i < m; ++i) {
        for (int j = 0; j < p; ++j) {
            for (int k = 0; k < n; ++k) {  // 公共维度
                C[i][j] += A[i][k] * B[k][j];
            }
        }
    }
    return C;
}

// 将LibTorch张量转换为二维vector
std::vector<std::vector<float>> tensor_to_vector(const torch::Tensor& tensor) {
    torch::Tensor t = tensor.detach().cpu().to(torch::kFloat32);
    int m = t.size(0);
    int n = t.size(1);
    std::vector<std::vector<float>> vec(m, std::vector<float>(n));

    //赋值
    for (int i = 0; i < m; ++i) {
        for (int j = 0; j < n; ++j) {
            vec[i][j] = t[i][j].item<float>();
        }
    }
    return vec;
}
相关推荐
chunmiao30326 分钟前
大模型推理加速新方向:中科曙光 ParaCache 用存储换计算
大数据·人工智能
MartinYeung59 分钟前
[论文学习]激活差异揭示后门:SAE架构对比研究
人工智能·学习·架构
小猴子爱上树11 分钟前
跨境电商AI批量图片翻译工具,视频字幕翻译免费试用
人工智能·python·音视频
开开心心就好11 分钟前
电子教鞭工具支持画框写字插图片功能齐全
android·开发语言·前端·javascript·人工智能·pdf·html
Dovis(誓平步青云)18 分钟前
拍视频前先把镜头想清楚:做一个分镜取景辅助器
android·java·服务器·javascript·人工智能
高洁0122 分钟前
Teacher Forcing技术解析
人工智能·python·深度学习·transformer·知识图谱
MartinYeung530 分钟前
[论文分析]使大型语言模型智能体与理性和道德偏好对齐:一种监督微调方法
人工智能·机器学习·语言模型
AI服务老曹32 分钟前
车牌识别算法接入AI视频分析平台的流程和误报优化
人工智能·算法·音视频
GrowthRadar34 分钟前
CNC柔性自动化工程验收标准:专业协作机器人集成商的四大核心技术能力
人工智能·机器人·自动化
a11177635 分钟前
MuJoCo 机械臂仿真快速入门指南+文档
人工智能·开源