张量基本运算

一、计算的核心

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

维度匹配前提:仅当矩阵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;
}
相关推荐
星辰_mya2 分钟前
关于ai——纯笔记
人工智能
智算菩萨15 分钟前
GPT-5.4原生操控电脑揭秘:从Playwright脚本到屏幕截图识别,手把手搭建你的第一个自动化智能体
人工智能·gpt·ai·chatgpt·自动化
田里的水稻16 分钟前
ubuntu22.04_openclaw_ROS2
人工智能·python·机器人
一碗白开水一30 分钟前
【工具相关】OpenClaw 配置使用飞书:打造智能飞书助手全流程指南(亲测有效,放心享用)
人工智能·深度学习·算法·飞书
小程故事多_8038 分钟前
Vibe Coding的致命隐患,你必须知道的技术债务和扩展性危机
大数据·人工智能·aigc
童话名剑40 分钟前
YOLO v3(学习笔记)
人工智能·深度学习·yolo·目标检测
康康的AI博客41 分钟前
农业工业变革:如何通过DMXAPI中转提升自动化效率
运维·人工智能·自动化
实在智能RPA1 小时前
从API集成到意图驱动:深度解析实在Agent在复杂ERP/OA环境下的非标接口处理架构
人工智能·ai·架构
北京耐用通信1 小时前
协议融合的工业钥匙:耐达讯自动化网关如何打通CC-Link IE转DeviceNet的通信壁垒
人工智能·物联网·网络协议·自动化·信息与通信
EasyGBS1 小时前
GB35114+GB28181:EasyGBS视频融合平台如何构建视频监控 “联网+安全” 双重保障体系
网络·人工智能·国标gb28181·gb35114