【线性代数】2-4:矩阵操作(Matrix Operations)
title: 【线性代数】2-4:矩阵操作(Matrix Operations)
toc: true
categories:
- Mathematic
- Linear Algebra
date: 2017-09-05 17:15:19
keywords: - addition
- subtraction
- multiplication
- inner product
- outer product
Abstract: 矩阵基本计算,包括加减乘法,主要是乘法的几种不同的理解
Keywords: Addition,Subtraction,Multiplication,Inner Product,Outer Product
开篇废话
今天的废话是,还没想好,想好了再补上
矩阵加法、减法
矩阵加减法,规则很简单,矩阵要求尺寸一样,row一样,column也得一样,这样按照对位相加减就行了。
[a11a12a13a21a22a23a31a32a33]±[b11b12b13b21b22b23b31b32b33]=[a11±a11a12±b12a13±b13a21±b21a22±b22a23±b23a31±b31a32±b32a33±b33]
\begin{bmatrix}a_{11}&&a_{12}&&a_{13}\\
a_{21}&&a_{22}&&a_{23}\\
a_{31}&&a_{32}&&a_{33}\end{bmatrix}
\pm
\begin{bmatrix}b_{11}&&b_{12}&&b_{13}\\
b_{21}&&b_{22}&&b_{23}\\
b_{31}&&b_{32}&&b_{33}\end{bmatrix}\\=
\begin{bmatrix}a_{11}\pm a_{11}&&a_{12}\pm b_{12}&&a_{13}\pm b_{13}\\
a_{21}\pm b_{21}&&a_{22}\pm b_{22}&&a_{23}\pm b_{23}\\
a_{31}\pm b_{31}&&a_{32}\pm b_{32}&&a_{33}\pm b_{33}\end{bmatrix}
⎣⎡a11a21a31a12a22a32a13a23a33⎦⎤±⎣⎡b11b21b31b12b22b32b13b23b33⎦⎤=⎣⎡a11±a11a21±b21a31±b31a12±b12a22±b22a32±b32a13±b13a23±b23a33±b33⎦⎤
这个没啥好说的,别减错地方就行。一对一进行
乘法
乘法才是矩阵计算的关键,计算意义,计算量,等很多是些非常有意义的研究课题,我记得本科学习线性代数的时候,老师先来将行列式,接着就是矩阵的计算法则,然后接着就是rank类的东西了,确实书本是这么讲的,但是现在想想,好像没啥逻辑,所以就没去上课了(给自己随便找个借口逃课)。
矩阵规模
相乘的两个矩阵尺寸上有些要求,例如对于: ABABAB
If A has n column,B must have n rows
如果A为m×nm\times nm×n,B为 n×pn\times pn×p那么他们相乘的结果:
(m×n)(n×p)=(m×p)
(m\times n)(n \times p)=(m\times p)
(m×n)(n×p)=(m×p)
Row Dot Product Column
Dot product之前已经讲过了,就是如何通过两个向量,pia的一下变成一个数字,矩阵可以看做是向量组成的,所以给出第一个规则,假设乘法为AB=CAB=CAB=C
Cij=(row  i  of  A)⋅(column  j  of  B)
C_{ij}=(row\;i\;of\;A) \cdot (column\;j\;of\;B)
Cij=(rowiofA)⋅(columnjofB)
这个规则是我之前上课学的,也是最基本的矩阵乘法公式,当然也可以写成求和的形式,但是我觉得通过dot product来看这个反而更直观一些,就不再把求和那个写出来了,补充句,在矩阵相乘的编程处理中,经过调整内外层循环,可以最大化利用高速缓冲,能够提高乘法速度。这个让我想起来之前项目,同事非要自己写乘法,然后就按照公式计算顺序,写了一个一毛一样的东西出来,虽然只做3x3的一个小矩阵乘法,速度什么的基本没什么影响,但是我觉得这当你不能保证你写的功能的稳定性和速度的时候,使用稳定的第三方库是个不错的选择。
Inner or Outer
dot product也叫inner product,当时我就在想有没有outer product,Pro. Strang在课堂上没有介绍outer但是在书上写了下,inner的矩阵形式是这样的:
[a1a2…an][b1b2⋮bn]=∑i=0nai∗bi
\begin{bmatrix}a_1&a_2&\dots&a_n\end{bmatrix}
\begin{bmatrix}b_1\\b_2\newline \vdots \\b_n\end{bmatrix}=\sum_{i=0}^{n}a_i*b_i
[a1a2…an]⎣⎢⎡b1b2⋮bn⎦⎥⎤=i=0∑nai∗bi
outer的矩阵形式,就是。。
[a1a2⋮an][b1b2…bm]=[a1b1a1b2…a1bma2b1a2b2…a2bm⋮⋮…⋮anb1anb2…anbm]
\begin{bmatrix}a_1\\a_2\newline \vdots \\a_n\end{bmatrix}
\begin{bmatrix}b_1&b_2&\dots&b_m\end{bmatrix}
=\begin{bmatrix}
a_1b_1&&a_1b_2&&\dots &&a_1b_m\\
a_2b_1&&a_2b_2&&\dots &&a_2b_m\\
\vdots&&\vdots&&\dots &&\vdots\\
a_nb_1&&a_nb_2&&\dots &&a_nb_m\\
\end{bmatrix}
⎣⎢⎡a1a2⋮an⎦⎥⎤[b1b2…bm]=⎣⎢⎢⎢⎡a1b1a2b1⋮anb1a1b2a2b2⋮anb2…………a1bma2bm⋮anbm⎦⎥⎥⎥⎤
其实outer的过程通过一行一列产生一个矩阵,所以当多列和多行(行和列必须相等数量)的矩阵相乘的时候就会产生多个矩阵,再对矩阵进行相加,这个过程的编程实现时,缓存利用率很高,就是本段开头说道的矩阵相乘的速度问题,当然这是不是最快的解决办法我也不知道,知识从哪本书上看到了这种说法,印象比较深刻
Column Model
列模型,如果把矩阵看做是很多列的组合,那么可以回归到最早的Ax=bAx=bAx=b的过程
AAA是被乘矩阵, x\textbf{x}x 扩展成多列的矩阵XXX
X=[⋮⋮…⋮x1x2…xn⋮⋮…⋮]
X=\begin{bmatrix}
\vdots&&\vdots&&\dots &&\vdots\\
x_1&&x_2&&\dots&&x_n\\
\vdots&&\vdots&&\dots &&\vdots\\
\end{bmatrix}
X=⎣⎢⎢⎡⋮x1⋮⋮x2⋮………⋮xn⋮⎦⎥⎥⎤
把x代入
$$
AX=
A
\begin{bmatrix}
\vdots&&\vdots&&\dots &&\vdots\
x_1&&x_2&&\dots&&x_n\
\vdots&&\vdots&&\dots &&\vdots\
\end{bmatrix}\
\begin{bmatrix}
\vdots&&\vdots&&\dots &&\vdots\
A x_1&&A x_2&&\dots&&A x_n\
\vdots&&\vdots&&\dots &&\vdots\
\end{bmatrix}
$$
写数学类的博客就是累,还是贴代码那种技术博客好写。
把X分解成多个列,每列与A的乘积作为结果对应的列,这就是列视角,或者叫做列模型
Row Model
有行就有列,有列就有行:
$$
A=\begin{bmatrix}
\dots&& a_1 &&\dots\
\dots&& a_2 &&\dots\
\vdots&&\vdots&&\vdots\
\dots&& a_m &&\dots\
\end{bmatrix}\
AX=
\begin{bmatrix}
\dots&& a_1 &&\dots\
\dots&& a_2 &&\dots\
\vdots&&\vdots&&\vdots\
\dots&& a_m &&\dots\
\end{bmatrix}X
\begin{bmatrix}
\dots&& a_1X &&\dots\
\dots&& a_2X &&\dots\
\vdots&&\vdots&&\vdots\
\dots&& a_mX &&\dots\
\end{bmatrix}
$$
行过程和列过程基本呈现一种对称关系,这也是线性代数有趣的一点,经常是左右开工,得到相同的结果。
Block
没错,矩阵是可以切块的,最极端的方式就是每个矩阵按照一个块一个元素的切法,那就和原始矩阵一样了,这种切块粒度太小,如果把一个矩阵当做一块,那粒度又太大,举个一般的例子
【线性代数】2-4:矩阵操作(Matrix Operations)的更多相关文章
- 移动端二三事【三】:transform的矩阵(matrix)操作、transform操作函数及注意事项
*每当在DOM浏览器中增加动态效果时,使用强大的transform和transition,总是很酸爽.抛开css,使用js操作transform还真的有点复杂,涉及到线性代数中的矩阵,但是js操作又不 ...
- Leetcode 566. Reshape the Matrix 矩阵变形(数组,模拟,矩阵操作)
Leetcode 566. Reshape the Matrix 矩阵变形(数组,模拟,矩阵操作) 题目描述 在MATLAB中,reshape是一个非常有用的函数,它可以将矩阵变为另一种形状且保持数据 ...
- 【线性代数】7-2:线性变化的矩阵(The Matrix of a Linear Transformation)
title: [线性代数]7-2:线性变化的矩阵(The Matrix of a Linear Transformation) categories: Mathematic Linear Algebr ...
- UVA 11992 - Fast Matrix Operations(段树)
UVA 11992 - Fast Matrix Operations 题目链接 题意:给定一个矩阵,3种操作,在一个矩阵中加入值a,设置值a.查询和 思路:因为最多20列,所以全然能够当作20个线段树 ...
- UVA11992 - Fast Matrix Operations(段树部分的变化)
UVA11992 - Fast Matrix Operations(线段树区间改动) 题目链接 题目大意:给你个r*c的矩阵,初始化为0. 然后给你三种操作: 1 x1, y1, x2, y2, v ...
- Fast Matrix Operations(UVA)11992
UVA 11992 - Fast Matrix Operations 给定一个r*c(r<=20,r*c<=1e6)的矩阵,其元素都是0,现在对其子矩阵进行操作. 1 x1 y1 x2 y ...
- Linear regression with one variable算法实例讲解(绘制图像,cost_Function ,Gradient Desent, 拟合曲线, 轮廓图绘制)_矩阵操作
%测试数据 'ex1data1.txt', 第一列为 population of City in 10,000s, 第二列为 Profit in $10,000s 1 6.1101,17.592 5. ...
- R语言编程艺术# 矩阵(matrix)和数组(array)
矩阵(matrix)是一种特殊的向量,包含两个附加的属性:行数和列数.所以矩阵也是和向量一样,有模式(数据类型)的概念.(但反过来,向量却不能看作是只有一列或一行的矩阵. 数组(array)是R里更一 ...
- MATLAB命令大全和矩阵操作大全
转载自: http://blog.csdn.net/dengjianqiang2011/article/details/8753807 MATLAB矩阵操作大全 一.矩阵的表示在MATLAB中创建矩阵 ...
随机推荐
- 异常处理 try
语法错误 这种错误的不能使用异常处理,你自己粗心写错怪谁,哼哼哼 比如说少冒号啦,丢了括号啦 逻辑错误 try: num = int(input("请输入数字")) print(1 ...
- python pyyaml 使用教程(代码案例)
test.py 内容 # 运行前,请先安装pyyaml模块 # pip3 install -i https://pypi.douban.com/simple/ pyyaml==5.1.1 import ...
- Educational Codeforces Round 71 (Rated for Div. 2) Solution
A. There Are Two Types Of Burgers 题意: 给一些面包,鸡肉,牛肉,你可以做成鸡肉汉堡或者牛肉汉堡并卖掉 一个鸡肉汉堡需要两个面包和一个鸡肉,牛肉汉堡需要两个面包和一个 ...
- docker 入门1 - 方向 【翻译】
开始,第 1 部分:方向和设置 欢迎!我们很高兴您想学习 Docker.Docker 入门教程将教您如何: 设置 Docker 环境(当前步骤) 生成映像并将其作为一个容器运行 缩放应用以运行多个容器 ...
- 怎样理解"不推荐不使用var的变量声明方式"这句话
答: 因为不使用var声明的变量不会被预解析, 如下: console.log(a); console.log(b); var a = 1; b = 2;
- 调研task_struct结构体
进程的描述PCB task_struct——PCB的一种,在linux中描述进程的结构体叫做task_struct. task_struct内容分类: 标识符:描述本进程的唯一标识符,用来区别其他进程 ...
- 12-MySQL DBA笔记-MySQL复制
第12章 MySQL复制 本章将为读者讲述MySQL的复制技术,首先,介绍最基础的主从复制,它是其他所有复制技术的基础,接着再为读者讲述各种复制架构的搭建,最后,列举了一些常见的复制问题及处理方式.复 ...
- 个人学习HTML以及CSS所得体会
拥有自己样式的浏览器: 苹果,欧朋,谷歌,IE,火狐 form标签<form></form> 表单属性: 1,action主要同来规定表单的作用,提交到处理器上面处理URL,默 ...
- Java攻城狮面试题录:笔试篇(1)
1.作用域public,private,protected,以及不写时的区别答:区别如下:不写时默认为friendly 2.ArrayList和Vector的区别,HashMap和Hashtable的 ...
- 基于C++11的100行实现简单线程池
基于C++11的100行实现简单线程池 1 线程池原理 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务.线程池线程都是后台线程.每个线程都使用默认的堆栈大小, ...
*每当在DOM浏览器中增加动态效果时,使用强大的transform和transition,总是很酸爽.抛开css,使用js操作transform还真的有点复杂,涉及到线性代数中的矩阵,但是js操作又不 ...
Leetcode 566. Reshape the Matrix 矩阵变形(数组,模拟,矩阵操作) 题目描述 在MATLAB中,reshape是一个非常有用的函数,它可以将矩阵变为另一种形状且保持数据 ...
title: [线性代数]7-2:线性变化的矩阵(The Matrix of a Linear Transformation) categories: Mathematic Linear Algebr ...
UVA 11992 - Fast Matrix Operations 题目链接 题意:给定一个矩阵,3种操作,在一个矩阵中加入值a,设置值a.查询和 思路:因为最多20列,所以全然能够当作20个线段树 ...
UVA11992 - Fast Matrix Operations(线段树区间改动) 题目链接 题目大意:给你个r*c的矩阵,初始化为0. 然后给你三种操作: 1 x1, y1, x2, y2, v ...
UVA 11992 - Fast Matrix Operations 给定一个r*c(r<=20,r*c<=1e6)的矩阵,其元素都是0,现在对其子矩阵进行操作. 1 x1 y1 x2 y ...
%测试数据 'ex1data1.txt', 第一列为 population of City in 10,000s, 第二列为 Profit in $10,000s 1 6.1101,17.592 5. ...
矩阵(matrix)是一种特殊的向量,包含两个附加的属性:行数和列数.所以矩阵也是和向量一样,有模式(数据类型)的概念.(但反过来,向量却不能看作是只有一列或一行的矩阵. 数组(array)是R里更一 ...
转载自: http://blog.csdn.net/dengjianqiang2011/article/details/8753807 MATLAB矩阵操作大全 一.矩阵的表示在MATLAB中创建矩阵 ...
语法错误 这种错误的不能使用异常处理,你自己粗心写错怪谁,哼哼哼 比如说少冒号啦,丢了括号啦 逻辑错误 try: num = int(input("请输入数字")) print(1 ...
test.py 内容 # 运行前,请先安装pyyaml模块 # pip3 install -i https://pypi.douban.com/simple/ pyyaml==5.1.1 import ...
A. There Are Two Types Of Burgers 题意: 给一些面包,鸡肉,牛肉,你可以做成鸡肉汉堡或者牛肉汉堡并卖掉 一个鸡肉汉堡需要两个面包和一个鸡肉,牛肉汉堡需要两个面包和一个 ...
开始,第 1 部分:方向和设置 欢迎!我们很高兴您想学习 Docker.Docker 入门教程将教您如何: 设置 Docker 环境(当前步骤) 生成映像并将其作为一个容器运行 缩放应用以运行多个容器 ...
答: 因为不使用var声明的变量不会被预解析, 如下: console.log(a); console.log(b); var a = 1; b = 2;
进程的描述PCB task_struct——PCB的一种,在linux中描述进程的结构体叫做task_struct. task_struct内容分类: 标识符:描述本进程的唯一标识符,用来区别其他进程 ...
第12章 MySQL复制 本章将为读者讲述MySQL的复制技术,首先,介绍最基础的主从复制,它是其他所有复制技术的基础,接着再为读者讲述各种复制架构的搭建,最后,列举了一些常见的复制问题及处理方式.复 ...
拥有自己样式的浏览器: 苹果,欧朋,谷歌,IE,火狐 form标签<form></form> 表单属性: 1,action主要同来规定表单的作用,提交到处理器上面处理URL,默 ...
1.作用域public,private,protected,以及不写时的区别答:区别如下:不写时默认为friendly 2.ArrayList和Vector的区别,HashMap和Hashtable的 ...
基于C++11的100行实现简单线程池 1 线程池原理 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务.线程池线程都是后台线程.每个线程都使用默认的堆栈大小, ...
