首页 > 其他分享 >矩阵乘法

矩阵乘法

时间:2024-09-04 11:06:21浏览次数:10  
标签:AB BC 矩阵 bigoplus otimes 乘法

矩阵可以看成一个二维数组,\(A_{i,j}\) 表示第 \(i\) 行第 \(j\) 列的元素。

一般来说,定义广义上的加法 \(\oplus\) 和乘法 \(\otimes\),那么矩阵乘法定义如下:

设 \(A\) 是 \(P\times M\) 的矩阵,\(B\) 是 \(M\times Q\) 的矩阵,\(C=AB\) 是 \(P\times Q\) 的矩阵,那么有,

\[C_{i,j}=\bigoplus_{k=1}^{M}A_{i,k}\otimes B_{k,j} \]

尝试证明矩阵乘法具有分配律,即

\[(AB)C=A(BC) \]

也即对任意 \(i,j\),有,

\[((AB)C)_{i,j}=(A(BC))_{i,j} \]

容易得到(方便起见,这里设矩阵均为 \(N\times N\) 的)

\[\begin{aligned} ((AB)C)_{i,j} &=\bigoplus_{s=1}^{N}(AB)_{i,s}\otimes C_{s,j}\\ &=\bigoplus_{s=1}^{N}\left(\bigoplus_{t=1}^{N}A_{i,t}\otimes B_{t,s}\right)\otimes C_{s,j} \end{aligned} \]

\[\begin{aligned} (A(BC))_{i,j} &=\bigoplus_{t=1}^{N}A_{i,t}\otimes (BC)_{t,j}\\ &=\bigoplus_{t=1}^{N}A_{i,t}\otimes \left(\bigoplus_{s=1}^{N}B_{t,s}\otimes C_{s,j}\right)\\ \end{aligned} \]

若 \(\otimes\) 对 \(\oplus\) 有分配律,则有

\[((AB)C)_{i,j}=(A(BC))_{i,j}=\bigoplus_{s=1}^{N}\bigoplus_{t=1}^{N}A_{i,s}\otimes B_{s,t}\otimes C_{t,j} \]

对于一般的 \((+,\times)\) 矩阵乘法,后者对前者有分配律,因此一般定义的矩阵乘法具有分配律。

众所周知矩阵乘法可以优化 DP,例如斐波那契数列的递推;同时单点修改的 DP 可以用线段树维护,称之为 DDP(线段树维护的东西需要有结合律,不然没法设计 tag)。

对于更一般的 DP,可能需要广义的矩乘,例如 \((\max,+)\) 等。

标签:AB,BC,矩阵,bigoplus,otimes,乘法
From: https://www.cnblogs.com/weily09/p/18396039/matrix

相关文章

  • Leetcode面试经典150题-54.螺旋矩阵
      解法都在代码里,不懂就留言或者私信这个题可能和算法关联不大,coding技巧为上classSolution{publicList<Integer>spiralOrder(int[][]matrix){/**先定义结果集*/List<Integer>ans=newArrayList<>();/**当前位置从(0,0)开始*/......
  • 矩阵乘以向量 Python代码
    回顾矩阵与向量相乘设有一个矩阵A(2行3列),设有一个列向量(3个分量)不难发现,矩阵×列向量,就是把矩阵看做是n个行向量然后与被乘的向量进行点乘,点乘得到的数量,就构成了一个新的向量上面的计算过程如下:回顾:矩阵×列向量的必要前提并不是所有矩阵都可和任意列向量相乘,......
  • 螺旋矩阵
    题目:螺旋矩阵分类:数组、矩阵、模拟给你一个m行n列的矩阵matrix,请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例1:输入:matrix=[[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例2:输入:matrix=[[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,1......
  • MATLAB 中的矩阵切片操作
    在MATLAB中,矩阵切片(MatrixSlicing)是一种非常常用的操作,用于从矩阵或数组中提取子集。这种操作非常灵活,可以通过指定行和列的索引来获取子矩阵。矩阵切片在数据处理、算法设计、图像处理等许多领域都非常有用。本文将详细介绍MATLAB中矩阵切片的基本用法和高级技巧。1.基......
  • 最小二乘法拟合圆心
    #include<map>#include<vector>#include<iostream>#include<string>voidFitCenterByLeastSquares(std::map<int,std::vector<double>>mapPoint,std::vector<double>&centerP,double&radius){do......
  • 【量化交易的数学基础】文科生也能搞懂的线性代数基础:矩阵和向量的那些事儿
    今天,我们继续来聊聊听起来有点可怕的线性代数,但其实,理解它并不需要你具备什么“数学天赋”。只需要一点点好奇心和一点点耐心。坐稳了,我们要启航了!1.矩阵和向量的基本概念和运算矩阵和向量是什么鬼?想象一下,矩阵就像一个表格,横竖排列了一堆数字,比如说我们有个3x3的方阵(对......
  • 图的广度优先搜索(BFS)算法与邻接矩阵表示
    图的广度优先搜索(BFS)算法与邻接矩阵表示1.图的表示2.广度优先搜索(BFS)BFS算法步骤:3.使用邻接矩阵的BFS实现4.运行时间分析时间复杂度:空间复杂度:5.BFS使用邻接列表与邻接矩阵的比较BFS在邻接列表上的运行时间:6.结论在计算机科学中,图......
  • L2-052 吉利矩阵 分数 25
    n=4时会被卡,可以打表过#include<bits/stdc++.h>usingnamespacestd;intl,n;constintN=5;intarr[N*N];intH[N],L[N];intf[10]={0,24,282,2008,10147,40176,132724,381424,981541,2309384};intdfs(intx){if(x>=n*n){ for(inti......
  • 解决平方矩阵问题
    问题输入整数N,输出一个N阶的二维数组。数组的形式参照样例。输入格式输入包含多行,每行包含一个整数N。当输入行为N=0时,表示输入结束,且该行无需作任何处理。输出格式对于每个输入整数N,输出一个满足要求的N阶二维数组。每个数组占N行,每行包含N个用空格隔开的整数。每个......
  • Magic Gems 矩阵乘法
    //MagicGems.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。///*http://oj.daimayuan.top/course/22/problem/1046题目描述Reziba拥有无限多个魔法宝石,每个魔法宝石的大小为1单元。每个魔法宝石可以被分解为m个普通宝石,每个普通宝石的大小也是1......