张量基本运算

一、计算的核心

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

维度匹配前提:仅当矩阵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;
}
相关推荐
武子康几秒前
调查研究-200 llama.cpp b9754:一次很小但很关键的 Agent 工具调用修复
人工智能·agent·llama
Ralph_Salar13 分钟前
从0到1搭建AI智能支付风控助手Stage1-RAG知识库升级 — 元数据让检索更精准
人工智能
武子康22 分钟前
调查研究-199 MCP Zero-Touch OAuth:为什么它是 MCP 进入企业生产的关键门槛?
人工智能·agent·mcp
冬奇Lab28 分钟前
每日一个开源项目(第144篇):ai-website-cloner-template - 一条命令、多 Agent 并行,把任意网站逆向成 Next.js 代码
前端·人工智能·开源
冬奇Lab28 分钟前
AI 原生组织不是买工具,而是让等待消失
人工智能·工作流引擎
半个落月40 分钟前
从数据集划分理解大模型的数据工程
人工智能
用户8299792943931 小时前
一文带你彻底搞懂claude code中的上下文压缩
人工智能
IT_陈寒1 小时前
Vue的这个响应式陷阱让我熬到凌晨三点
前端·人工智能·后端
冬奇Lab11 小时前
Workflow 系列(01):基础理论——三种执行模型与 Anthropic 5 种模式
人工智能·agent·工作流引擎
冬奇Lab11 小时前
每日一个开源项目(第143篇):page-agent - 纯 JS 的网页 GUI Agent,无需截图、无需插件、无需后端
前端·人工智能·agent