首页 > 其他分享 >矩阵乘法与加法模板 Matrix

矩阵乘法与加法模板 Matrix

时间:2025-01-19 23:43:46浏览次数:1  
标签:obj matrix 矩阵 repl 加法 return 模板 Matrix

更新日志 20250119:开工。

运算

对于矩阵乘法运算

\[A\times B=C \]

你可以认为,\(C\) 中第 \(i\) 行第 \(j\) 列的元素,就是 \(A\) 的第 \(i\) 行依次与 \(B\) 的第 \(j\) 列相乘的乘积之和。

形式化的:

\[C_{i,j}=\sum_{k=1}^n A_{i,k}B_{k,j} \]

写成代码就是:

rep(i,1,n)rep(j,1,n)rep(k,1,n)
    c[i][j]+=a[i][k]*b[k][j];

至于加法,各位分别相加即可。

模板

template <typename T>
struct matrix{
    int n;
    vec<vec<T>> x;
    matrix(int l,bool k=0){
        n=l;
        x.resize(n,vec<T>(n,0));
        if(k)repl(i,0,n)x[i][i]=1;
    }
    vec<T>& operator[](int i){return x[i];}
    matrix operator+(matrix obj){
        matrix c(n);
        repl(i,0,n)repl(j,0,n)
            c[i][j]=x[i][j]+obj[i][j];
        return c;
    }
    matrix operator*(matrix obj){
        matrix c(n);
        repl(i,0,n)repl(j,0,n)repl(k,0,n)
            c[i][j]+=x[i][k]*obj[k][j];
        return c;
    }
    bool operator==(matrix obj){
        if(n!=obj.n)return 0;
        repl(i,0,n)repl(j,0,n)
            if(x[i][j]!=obj[i][j])return 0;
        return 1;
    }
};

模板特点

  • 首先你可以自由传入类型。当然肯定是 \(\text{int,long long}\) 之类的数。
  • 使用了动态数组(实际上是vector)可以动态开空间。
  • 可以初始化矩阵 \(1\)。第二个参数传入 \(1\) 即可。(第一个参数是大小)
  • 重载了+ * ==等运算符。没啥好说的。
  • 重载了下标,也就是可以直接通过这个矩阵的名字作为数组名(Matrix[][]),而不用 Matrix.x[][]
  • 以及留作提醒,初始化矩阵,无需一个一个下标去赋值,可以直接 Matrix.x={},也就是直接给 vector 赋值即可。这样直接写会方便一些。

差不多就这样。

标签:obj,matrix,矩阵,repl,加法,return,模板,Matrix
From: https://www.cnblogs.com/HarlemBlog/p/18680509

相关文章

  • 如何修改网站模板中的图片?(轻松修改网站模板图片的完整指南)
    网站模板中的图片是影响视觉效果的重要元素之一。无论是更换Logo、横幅还是背景图,都需要掌握正确的修改方法。本文将指导您如何轻松地修改网站模板中的图片,确保网站始终保持最佳外观。答案:要修改网站模板中的图片,请按照以下步骤操作:确定图片位置:首先找到需要替换的图片所在的......
  • 如何修改PHPOK网站模板中的Logo
    PHPOK是一款功能强大的内容管理系统,广泛应用于各种类型的网站。如何在PHPOK网站模板中修改Logo,使其更加符合网站的品牌形象?解决方案:登录后台管理系统:首先,以管理员身份登录PHPOK的后台管理系统。进入模板管理:在后台管理系统中,找到“模板管理”或“主题管理”选项,点击进入。选......
  • 卷积加法自注意力CASAtt详解及代码复现
    自注意力机制简介自注意力机制(Self-Attention)是一种特殊的注意力机制,允许模型在处理序列数据时考虑每个元素与其他所有元素的关系。这种机制通过计算查询、键和值向量,帮助模型更好地理解序列中的上下文信息。自注意力机制的核心在于计算每个元素的权重,反映元素之间的相互关......
  • C++模板--packaged_task 如何打包 lambda 和函数指针?
    从它的构造函数上看,似乎不能接受lambda和函数指针作为构造函数的参数但可以通过如下自定义推导规则来实现.这实际上是DeductionGuides技术//1template<class_Rp,class..._Args>packaged_task(_Rp(*)(_Args...))->packaged_task<_Rp(_Args...)>;//2template......
  • 区间合并(C++模板)
    //区间合并(模板)#include<iostream>#include<vector>#include<algorithm>usingnamespacestd;typedefpair<int,int>PA;vector<PA>segs;intn;intHebing(vector<PA>&segs){ vector<PA>res; sort(segs.begin(),......
  • C++ STL 初探:打开标准模板库的大门
    文章目录C++STL初探:打开标准模板库的大门前言第一章:什么是STL?1.1标准模板库简介1.2STL的历史背景1.3STL的组成第二章:STL的版本与演进2.1不同的STL版本2.2STL的影响与重要性第三章:为什么学习STL?3.1从手动编写到标准化解决方案3.2泛型编程的核心3.3STL......
  • 将IDEA的setter代码模板改成链式setter
    setter传统模式UserInfouserInfo=newUserInfo();userInfo.setUserId("zhangsan");userInfo.setUserName("张三");userInfo.setAge(18);每一行都需要分号来隔断,影响编码效率。链式setterUserInfouserInfo=newUserInfo().setUserId("zhangsan").setUserNam......
  • 函数模板问题
    在笔试过程中遇到函数模板问题,记录问题并给出解答。问题:下面代码会执行什么结果:#include<iostream>usingnamespacestd;template<typenameT>voidprint(Tt){cout<<"Template:"<<t<<endl;}voidprint(inti){cout<<"int:"&......
  • C++新文件模板
    1.普通模板#include<bits/stdc++.h>usingnamespacestd;#defineinfile"infile.in"#defineoutfile"outfile.out"#definecin_cout_f#definespeedup#ifdefcin_cout_f#definecin_____in_____#definecout_____out_____ifstream____......
  • 漏洞预警 | CraftCMS模板注入漏洞
    0x00漏洞编号CVE-2024-561450x01危险等级高危0x02漏洞概述        CraftCMS是一个灵活的、易于使用的内容管理系统。0x03漏洞详情CVE-2024-56145漏洞类型:模板注入影响:执行任意代码简述:CraftCMS存在模板注入漏洞,若开启了PHP配置中的register_argc_arg......