张量基本运算

一、计算的核心

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

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

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

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

C[i][j] = Σ(k=0到n-1)A[i][k] × B[k][j]

关键性质:不满足交换律(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;
}
相关推荐
XD7429716369 小时前
科技早报晚报|2026年5月16日:本地化闸门、训练前优化与设备信任栈,今天更值得跟进的 3 个技术机会
人工智能·科技·科技新闻·开发者工具·工程质量·科技早报
hu9245195599 小时前
基于阻尼能量的 P波初至 自动拾取算法
人工智能
fpcc9 小时前
AI和大模型——梯度和梯度下降
人工智能
深度学习lover9 小时前
<数据集>yolo 笔识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·笔识别
熊猫钓鱼>_>9 小时前
Q-Learning详解:从理论到实战的完整指南
人工智能·python·架构·大模型·llm·machine learning·q-learning
落羽的落羽9 小时前
【项目】C++从零实现JsonRpc框架——项目引入
linux·服务器·开发语言·c++·人工智能·算法·机器学习
灵机一物9 小时前
灵机一物AI原生电商小程序、PC端(已上线)-TST Token叠加训练技术解析:预训练提速2.5倍,零改架构、零推理负担
人工智能
孙高飞10 小时前
AI 驱动 UI 自动化的完整 DEOM 工程下载与详解
人工智能·ui·自动化
狒狒热知识10 小时前
2026软文营销行业规范化发展报告:优质平台甄选标准与企业投放策略
人工智能
海盗123410 小时前
AI科技周刊:2026年5月中旬大模型竞争白热化
人工智能·科技·ai