张量基本运算

一、计算的核心

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

维度匹配前提:仅当矩阵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;
}
相关推荐
weikecms9 小时前
麦当劳在线下单接口
人工智能·微客云
147API9 小时前
Project Glasswing 扩展后,AI 安全扫描不能只看发现漏洞
人工智能·安全·api·claude
装不满的克莱因瓶9 小时前
学习 LCEL 表达式:降低 LLM 应用开发难度
人工智能·ai·langchain·agent·智能体·lcel·langgraph
香蕉鼠片9 小时前
数字化图像的过程
人工智能·深度学习·计算机视觉
百胜软件@百胜软件9 小时前
巡讲实录丨AI让业务自己跑:胜券AI多智能体协同,加速业务运营新效能
人工智能·零售数字化·数智中台·珠宝行业
继续商行9 小时前
Go 切片与数组内存分配底层差异:大数据量场景下的性能对比
人工智能
向量引擎10 小时前
多模型 API 网关接入实践:统一 Base URL、API Key 管理与故障排查
人工智能·gpt·ai编程·ai写作·key
KKKlucifer10 小时前
AI赋能安全运营,构建闭环数据风险防御体系
人工智能·安全
A_Sinon10 小时前
卷积神经网络
人工智能·神经网络·cnn
继续商行10 小时前
跨语言 Benchmark 实战:C++、Rust、Go、Java 在 AI 向量计算场景下的性能硬核横评
人工智能