python矩阵运算与线形代数_[译] 线性代数:矩阵基本运算

线性代数:矩阵基本运算

在本文中,我们将介绍矩阵的大部分基本运算,依次是矩阵的加减法、矩阵的标量乘法、矩阵与矩阵的乘法、求转置矩阵,以及深入了解矩阵的行列式运算。本文将不会涉及逆矩阵、矩阵的秩等概念,将来再探讨它们。

矩阵的加减法

矩阵的加法与减法运算将接收两个矩阵作为输入,并输出一个新的矩阵。矩阵的加法和减法都是在分量级别上进行的,因此要进行加减的矩阵必须有着相同的维数。

为了避免重复编写加减法的代码,我们先创建一个可以接收运算函数的方法,这个方法将对两个矩阵的分量分别执行传入的某种运算。然后在加法、减法或者其它运算中直接调用它就行了:class Matrix{

// ...

componentWiseOperation(func, { rows }) {

const newRows = rows.map((row, i) =>

row.map((element, j) => func(this.rows[i][j], element))

)

return new Matrix(...newRows)

}

add(other) {

return this.componentWiseOperation((a, b) => a + b, other)

}

subtract(other) {

return this.componentWiseOperation((a, b) => a - b, other)

}

}

const one = new Matrix(

[1, 2],

[3, 4]

)

const other = new Matrix(

[5, 6],

[7, 8]

)

console.log(one.add(other))

// Matrix { rows: [ [ 6, 8 ], [ 10, 12 ] ] }

console.log(other.subtract(one))

// Matrix { rows: [ [ 4, 4 ], [ 4, 4 ] ] }

矩阵的标量乘法

矩阵的标量乘法与向量的缩放类似,就是将矩阵中的每个元素都乘上标量:class Matrix{

// ...

scaleBy(number) {

const newRows = this.rows.map(row =>

row.map(element => element * number)

)

return new Matrix(...newRows)

}

}

const matrix = new Matrix(

[2, 3],

[4, 5]

)

console.log(matrix.scaleBy(2))

// Matrix { rows: [ [ 4, 6 ], [ 8, 10 ] ] }

矩阵乘法

当 A、B 两个矩阵的维数是兼容的时候,就能对这两个矩阵进行矩阵乘法。所谓维数兼容,指的是 A 的列数与 B 的行数相同。矩阵的乘积 AB 是通过对 A 的每一行与矩阵 B 的每一列计算点积得到:

wAAACwAAAAAAQABAEACAkQBADs=

class Matrix{

// ...

multiply(other) {

if (this.rows[0].length !== other.rows.length) {

throw new Error('The number of columns of this matrix is not equal to the number of rows of the given matrix.')

}

const columns = other.columns()

const newRows = this.rows.map(row =>

columns.map(column => sum(row.map((element, i) => element * column[i])))

)

return new Matrix(...newRows)

}

}

const one = new Matrix(

[3, -4],

[0, -3],

[6, -2],

[-1, 1]

)

const other = new Matrix(

[3, 2, -4],

[4, -3, 5]

)

console.log(one.multiply(other))

// Matrix {

// rows:

// [ [ -7, 18, -32 ],

// [ -12, 9, -15 ],

// [ 10, 18, -34 ],

// [ 1, -5, 9 ] ]}

我们可以把矩阵乘法 AB 视为先后应用 A 和 B 两个线性变换矩阵。为了更好地理解这种概念,可以看一看我们的 linear-algebra-demo。

下图中黄色的部分就是对红色方块应用线性变换 C 的结果。而线性变换 C 就是矩阵乘法 AB 的结果,其中 A 是做相对于 y 轴进行反射的变换矩阵,B 是做剪切变换的矩阵。

wAAACwAAAAAAQABAEACAkQBADs=

如果在矩阵乘法中调换 A 和 B 的顺序,我们会得到一个不同的结果,因为相当于先应用了 B 的剪切变换,再应用 A 的反射变换:

wAAACwAAAAAAQABAEACAkQBADs=

转置

转置矩阵

wAAACwAAAAAAQABAEACAkQBADs= 由公式

wAAACwAAAAAAQABAEACAkQBADs= 定义。换句话说,我们通过关于矩阵的对角线对其进行翻转来得到转置矩阵。需要注意的是,矩阵对角线上的元素不受转置运算影响。class Matrix{

// ...

transpose() {

return new Matrix(...this.columns())

}

}

const matrix = new Matrix(

[0, 1, 2],

[3, 4, 5],

[6, 7, 8],

[9, 10, 11]

)

console.log(matrix.transpose())

// Matrix {

// rows: [

// [ 0, 3, 6, 9 ],

// [ 1, 4, 7, 10 ],

// [ 2, 5, 8, 11 ]

// ]

// }

行列式运算

矩阵的行列式运算将计算矩阵中的所有系数,最后输出一个数字。准确地说,行列式可以描述一个由矩阵行构成的向量的相对几何指标(比如在欧式空间中的有向面积、体积等空间概念)。更准确地说,矩阵 A 的行列式相当于告诉你由 A 的行定义的方块的体积。

wAAACwAAAAAAQABAEACAkQBADs= 矩阵的行列式运算如下所示:

wAAACwAAAAAAQABAEACAkQBADs=

wAAACwAAAAAAQABAEACAkQBADs= 矩阵的行列式运算如下所示:

wAAACwAAAAAAQABAEACAkQBADs=

我们的方法可以计算任意大小矩阵(只要其行列的数量相同)的行列式:class Matrix{

// ...

determinant() {

if (this.rows.length !== this.rows[0].length) {

throw new Error('Only matrices with the same number of rows and columns are supported.')

}

if (this.rows.length === 2) {

return this.rows[0][0] * this.rows[1][1] - this.rows[0][1] * this.rows[1][0]

}

const parts = this.rows[0].map((coef, index) => {

const matrixRows = this.rows.slice(1).map(row => [ ...row.slice(0, index), ...row.slice(index + 1)])

const matrix = new Matrix(...matrixRows)

const result = coef * matrix.determinant()

return index % 2 === 0 ? result : -result

})

return sum(parts)

}

}

const matrix2 = new Matrix(

[ 0, 3],

[-2, 1]

)

console.log(matrix2.determinant())

// 6

const matrix3 = new Matrix(

[2, -3, 1],

[2, 0, -1],

[1, 4, 5]

)

console.log(matrix3.determinant())

// 49

const matrix4 = new Matrix(

[3, 0, 2, -1],

[1, 2, 0, -2],

[4, 0, 6, -3],

[5, 0, 2, 0]

)

console.log(matrix4.determinant())

// 20

行列式可以告诉我们变换时对象被拉伸的程度。因此我们可以将其视为线性变换改变面积的因子。为了更好地理解这个概念,请参考 linear-algebra-demo:

在下图中,我们可以看到对红色的 1×1 方形进行线性变换后得到了一个 3×2 的长方形,面积从 1 变为了 6,这个数字与线性变换矩阵的行列式值相同。

wAAACwAAAAAAQABAEACAkQBADs=

如果我们应用一个剪切变换,可以看到方形会变成一个面积不变的平行四边形。因此,剪切变换矩阵的行列式值等于 1:

wAAACwAAAAAAQABAEACAkQBADs=

如果行列式的值是负数,则说明应用线性变换后,空间被反转了。比如在下图中,我们可以看到变换前

wAAACwAAAAAAQABAEACAkQBADs=

wAAACwAAAAAAQABAEACAkQBADs= 的左边,而变换后

wAAACwAAAAAAQABAEACAkQBADs=

wAAACwAAAAAAQABAEACAkQBADs= 的右边。

wAAACwAAAAAAQABAEACAkQBADs=

如果变换的行列式为 0,则表示它会将所有空间都压缩到一条线或一个点上。也就是说,计算一个给定矩阵的行列式是否为 0,可以判断这个矩阵对应的线性变换是否会将对象压缩到更小的维度去。

wAAACwAAAAAAQABAEACAkQBADs=

在三维空间里,行列式可以告诉你体积缩放了多少:

wAAACwAAAAAAQABAEACAkQBADs=

变换行列式等于 0,意味着原来的空间会被完全压缩成体积为 0 的空间。如前文所说,如果在 2 维空间中变换的行列式为 0,则意味着变换的结果将空间压缩成了一条线或一个点;而在 3 维空间中变换的行列式为 0 意味着一个物体会被压扁成一个平面,如下图所示:

wAAACwAAAAAAQABAEACAkQBADs=

出处:https://juejin.im/post/5d107b00f265da1b67211a21

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506414.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

torch tensor去掉1维_南昌清污机新价格表1_海腾水工

南昌清污机新价格表1,应用中,应停止机械零件,停止防锈处理,定期在停水面涂抹黄油,开关发生某些异常,立即暂停,及时检查。 开闭时,请注意活塞的上下限位置,以免挡板和卷扬机损坏。 起…

fx系列微型可编程控制器 通信_电气人,三菱Q系列和FX PLC系列之间的区别你都知道吗?...

三菱Q系列和FX系列作为三菱旗下的两大PLC系列,在日常的作业中小伙伴们都会接触到,因此本文将三菱可编程控制器中使用的内置的输入输出继电器、辅助继电器、状态、计数器、数据寄存器等各种软元件的作用和功能进行了说明。Q系列FX系列输入继电器 X输入继电…

left join 效率_人力资源HR的人才测评工具,极大提高招聘效率

作为一个HR小白,打交道最多的就是简历,领导谈的最多的就是提高工作效率,其实这个概念对于我来说还是挺抽象的,经过向前辈的取经,人力资源如何提高效率,做了个小小的总结。首先我们要明白我们的难点有哪些&a…

windows media player 9_openmeetings(开源视频会议系统)的详细安装步骤 (windows版)

一、开源视频会议系统openmeetings的简介:OpenMeetings是一个多语言可定制的视频会议和协作系统。它支持音频、视频,能让你查看每个与会者的桌面。OpenMeetings还包含一个白板,通过白板可以导入各种格式的图片和涂鸦。它是基于OpenLaszlo’s的…

Java实例化后自动执行_Java的实例化顺序(程序执行顺序)

加载/执行顺序:牢记一点:静态和非静态分开处理使用到静态加载时,静态又分为: 静态变量, 静态代码块, 其中加载顺序是按照类中书写的先后顺序加载的非静态加载顺序: 按照非静态书写顺序加载/执行…

python数据分析_使用Python进行数据分析

麦金尼编写的《使用Python进行数据分析》是最经典的数据分析教材,本专栏主要应用视频讲解的方式,讲授本书核心思想,并提供本教材的所有代码和代码点评。注意:视频网址必须用电脑台式机打开!手机访问不到视频。注意&…

百度原创度在线检测_资深自媒体作者:做自媒体没有这款“原创度检测”软件是不行的...

目前市面上除了今日头条自媒体平台外,好友好多好多其它的自媒体平台,比如百度的百家号、360的快船号、腾讯的企鹅号等等,各种各样的自媒体平台,如此多的自媒体平台大家每天写作的资源和话题也就那么多,免不了有些人就会…

如何看懂串口通讯协议_一文看懂PLC的通讯方式——AB系统(一)

写在前面一直以来,PLC跟其他设备的通讯方式都是自动化工程师入门学习的难点和要点。说它难,因为这里面牵扯到了数据通讯的一些知识,大多数从事PLC工作的人员都是从电气、电子、自动化、机电等相关专业出身的,可能上学时候也只是简…

linux mysql 实战_linux实用实战

1、编译安装搭建wordpress软件环境:apr-1.6.2.tar.gzphp-7.1.10.tar.xz http://php.net/mariadb-10.2.8-linux-x86_64.tar.gz http://mariadb.org/wordpress-4.8.1-zh_CN.tar.gz https://cn.wordpress.org/1 、源码编译安装Httpd2.4(1)安装包组和包yum groupinstall…

java不需要返回数据时_从Java方法返回时,BigDecimal不保持实际值

我正在用Java制作货币转换应用程序.其他一些很棒的StackOverflowians给了我建议读取BigDecimal,目的是替换double来解决任何精度问题.我有两个方法系统;它从起始货币转换为美元,然后将美元价值转换为目标货币.请注意,我的转化率存储如下:// Conversion Rates - STAR…

openstack架构详解图_英特尔顶级技术专家合力缔造精品:Linux开源网络全栈详解...

日常水开篇自1991年诞生起,Linux已经走过了接近三十年。Linux早已没有了问世时的稚气,正在各个领域展示自己成熟的魅力。以Linux为基础,也衍生出了各种开源生态,例如网络和存储。而生态离不开形形色色的开源项目,在人人…

java多次点击时事件_click事件的累加绑定,绑定一次点击事件,执行多次

我的github(PS:希望star):https://github.com/thWinterSun/v-admin最近做项目为一个添加按钮绑定点击事件,很简单的一个事情,于是我按照通常做法找到元素,使用jquery的on()方法为元素绑定了点击事件,点击同时发送请求。完成后看效…

基于matlab的fisher线性判别及感知器判别_基于嵌入表示的网络实体对齐方法进展概述...

网络实体对齐是指给定两个网络,把两个网络中等价的实体合并。实体对齐在很多领域都有重要应用,比如,跨平台社交网络的用户对齐可以用于用户画像、用户兴趣挖掘,跨语言知识图谱的实体对齐可以辅助机器翻译、跨语言信息检索。传统的…

mfc指示灯报警显示_奔驰车辆常用指示灯功能讲解

点击箭头处“蓝色字”,关注我们哦!!今天将为大家解析车辆仪表盘指示灯功能,当然,我们为大家带来的是奔驰车型的指示灯解读。奔驰在指示灯上的设计是什么风格呢?下面我们就来带大家详细解读。疲劳驾驶报警指…

java无锁消费者框架_无锁并行框架多生产者多消费者模型

下面看一下多生产多消费者的模式,下面的代码是模拟100个生产者,每个生产者生产100个事件,然后有3个消费者,同时进行消费,共消费1W个事件,下面看一下代码:这边new出了3个消费者,并把消…

win10无法连接到这个网络_电脑无法连接网络怎么办?(有线网络篇)

哈喽!各位小伙伴大家好呀!好久不见,近期真的太多小伙伴咨询网络问题了,没办法,虽然以前写过相关文章,断网、网络卡、慢、掉线的常规解决方法不过可能还不够细致,本篇就尽量把所有的问题都提出解…

LeetCode反转链表java_Leetcode 反转链表系列 图解详细过程

对于一个程序猿来说,数据结构和算法的重要性就不用我多说了吧,算法题已然成了现在大厂笔试面试的重头戏,废话少说,Leetcode 刷起来呀。说起刷 Leetcode,我建议你按 tag 刷,不然只能像无头苍蝇,东…

amd插帧技术如何开启_联想ThinkPad笔记本电脑如何开启CPU的虚拟化技术图文教程...

联想ThinkPad笔记本电脑如何开启CPU的虚拟化技术图文教程很多情况下可能我们都需要开启CPU虚拟化技术,例如我们需要打开安卓模拟器,在打开安卓模拟器的时候如果提示您需要CPU虚拟化技术,那么我们需要在主板BIOS设置中进行开启,下面…

没有内存条电脑能开机吗_换内存加固态,老电脑也能快到起飞,附纯国产内存条雷赤测评...

我在公司里用的那台电脑是品牌机,配置有点低,处理器是i3-6100,内存是4GB,硬盘是1TB的机械,这个配置日常办公是没有问题的,但是现在有一些活已经超出了这个配置的能力,加之近期的一些工作还需要在…

嵌入式编程要不要学数据结构_少儿编程要不要学?其实国家早就给出了答案……...

随着人工智能的热度不断攀升,少儿编程越来越火,逐渐成为爸妈们的热门话题。自家的孩子适不适合学习少儿编程,很多专业人士发出了各种不同的声音。这也让很多望子成龙的家长一头雾水,分不清究竟该何去何从?那么&#xf…