【学习笔记】矩阵运算入门
1. 标量、向量、矩阵和张量
在线性代数中有几个核心概念:标量、向量、矩阵和张量。
(1)标量(Scalar) :标量其实就是一个独立存在的数,比如实数5就可以看做是一个标量,所以标量的运算相对简单,与平常做的数学算术运算类似。
(2)向量(Vector):向量指一列按顺序排列的元素,我们通常习惯用括号将这一列元素括起来,其中每个元素都由一个索引值来唯一地确定其在向量中的位置,假设这个向量中的第1个元素是x1x_1x1,它的索引值就是1,第二个元素是x2x_2x2,它的索引值就是2。如下所示是一个由三个元素组成的向量,这个向量的索引值从1到3分别对应了x1,x2,x3x_1,x_2,x_3x1,x2,x3这三个元素:
[x1x2x3]\begin{bmatrix}x_1\\ x_2\\ x_3 \end{bmatrix}⎣⎡x1x2x3⎦⎤
向量还有一个特性:向量中的不同数字还可以用于表示不同坐标轴上的坐标值。比如,可以把下面这个向量看作三个不同的坐标轴上的坐标值,可以假设2是x轴坐标,3是y轴坐标,8是z轴坐标:
[238]\begin{bmatrix}2\\ 3\\ 8 \end{bmatrix}⎣⎡238⎦⎤
(3)矩阵(Matrix):矩阵是一个二维数组结构,我们会用括号将其中全部元素括起来。向量的索引值是一维的,而矩阵的索引值是二维的,所以确定矩阵中每个元素的位置时需要两个数字。例如一个三行两列的矩阵:
X=[123456]X=\begin{bmatrix}1 & 2\\ 3 & 4\\ 5 & 6 \end{bmatrix}X=⎣⎡135246⎦⎤
矩阵中元素3位于第二行第一列,因此3的索引值为“21”,6位于第三行第二列,因此6的索引值为“32”。
(4)张量(Tensor):若数组的维度超过了二维,我们可以用张量来表示,所以可以把张量理解为高维数组。张量中元素的索引值会随着张量维度的改变而改变。
2. 矩阵的转置
矩阵的转置是矩阵进行相关运算时会采用的一种变换方法。一般情况下通过在矩阵右上角加符号‘T’表示其是一个转置矩阵:XTX^TXT。
我们对原矩阵X中的元素在经过变换后得到的相应转置矩阵做如下定义:(XT)i,j=Xj,i(X^T)_i,_j = X_j,_i(XT)i,j=Xj,i。例如:
X=[123456]X=\begin{bmatrix}1 & 2\\ 3 & 4\\ 5 & 6 \end{bmatrix}X=⎣⎡135246⎦⎤
则
XT=[135246]X^T=\begin{bmatrix}1 & 3 & 5\\ 2 & 4 & 6 \end{bmatrix}XT=[123456]
实现:
import numpy as np
np.transpose([[1,2],[3,4],[5,6]])
#输出为array([[1,3,5],
# [2,4,6]])
#方式二:
def transpose(M):# 初始化转置后的矩阵result = []# 获取转置前的行和列row, col = shape(M)# 先对列进行循环for i in range(col):# 外层循环的容器item = [] # 在列循环的内部进行行的循环for index in range(row):item.append(M[index][i])result.append(item)return result
3.常见矩阵运算
from numpy import *;
a1=array([1,2,3]);
a1=mat(a1);#创建常见矩阵data1=mat(zeros((3,3)));
#创建一个3*3的零矩阵,矩阵这里zeros函数的参数是一个tuple类型(3,3)
data2=mat(ones((2,4)));
#创建一个2*4的1矩阵,默认是浮点型的数据,如果需要时int类型,可以使用dtype=int
data3=mat(random.rand(2,2));
#这里的random模块使用的是numpy中的random模块,random.rand(2,2)创建的是一个二维数组,需要将其转换成#matrix
data4=mat(random.randint(10,size=(3,3)));
#生成一个3*3的0-10之间的随机整数矩阵,如果需要指定下界则可以多加一个参数
data5=mat(random.randint(2,8,size=(2,5));
#产生一个2-8之间的随机整数矩阵
data6=mat(eye(2,2,dtype=int));
#产生一个2*2的对角矩阵a1=[1,2,3];
a2=mat(diag(a1));
#生成一个对角线为1、2、3的对角矩阵#矩阵相乘
a1=mat([1,2]);
a2=mat([[1],[2]]);
a3=a1*a2;
#1*2的矩阵乘以2*1的矩阵,得到1*1的矩阵#矩阵点乘
a1=mat([1,1]);
a2=mat([2,2]);
a3=multiply(a1,a2);a1=mat([2,2]);
a2=a1*2;
#矩阵对应元素相乘#求逆和转置
a1=mat(eye(2,2)*0.5);
a2=a1.I;
#求矩阵matrix([[0.5,0],[0,0.5]])的逆矩阵
a1=mat([[1,1],[0,0]]);
a2=a1.T;
#转置#计算每一行每一列的和
a2=a1.sum(axis=0);//列和,这里得到的是1*2的矩阵
a3=a1.sum(axis=1);//行和,这里得到的是3*1的矩阵
a4=sum(a1[1,:]);//计算第一行所有列的和,这里得到的是一个数值a1.max();//计算a1矩阵中所有元素的最大值,这里得到的结果是一个数值
a2=max(a1[:,1]);//计算第二列的最大值,这里得到的是一个1*1的矩阵
a1[1,:].max();//计算第二行的最大值,这里得到的是一个一个数值np.max(a1,0);//计算所有列的最大值,这里使用的是numpy中的max函数
np.max(a1,1);//计算所有行的最大值,这里得到是一个矩阵np.argmax(a1,0);//计算所有列的最大值对应在该列中的索引
np.argmax(a1[1,:]);//计算第二行中最大值对应在改行的索引#矩阵分割
a=mat(ones((3,3)));
b=a[1:,1:];//分割出第二行以后的行和第二列以后的列的所有元素
#矩阵合并
a=mat(ones((2,2)));
b=mat(eye(2));
c=vstack((a,b));//按列合并,即增加行数
d=hstack((a,b));//按行合并,即行数不变,扩展列数#矩阵、列表、数组变换
l1=[[1],'hello',3];a=array([[2],[1]]);
dimension=a.ndim;
m,n=a.shape;
number=a.size;//元素总个数
str=a.dtype;//元素的类型a1=[[1,2],[3,2],[5,2]];//列表
a2=array(a1);//将列表转换成二维数组
a3=array(a1);//将列表转化成矩阵
a4=array(a3);//将矩阵转换成数组
a5=a3.tolist();//将矩阵转换成列表
a6=a2.tolist();//将数组转换成列表a1=[1,2,3];
a2=array(a1);
a3=mat(a1);
a4=a2.tolist();//这里得到的是[1,2,3]
a5=a3.tolist();//这里得到的是[[1,2,3]]
a6=(a4 == a5);//a6=False
a7=(a4 is a5[0]);//a7=True,a5[0]=[1,2,3]
参考链接:https://blog.csdn.net/taxueguilai1992/article/details/46581861
【学习笔记】矩阵运算入门相关推荐
- mybatis学习笔记(3)-入门程序一
2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(3)-入门程序一 标签: mybatis [TOC] 工程结构 在IDEA中新建了一个普通的java项 ...
- nginx学习笔记-01nginx入门,环境搭建,常见命令
nginx学习笔记-01nginx入门,环境搭建,常见命令 文章目录 nginx学习笔记-01nginx入门,环境搭建,常见命令 1.nginx的基本概念 2.nginx的安装,常用命令和配置文件 3 ...
- React学习笔记:入门案例
React学习笔记:入门案例 React 起源于 Facebook 内部项目,因为市场上所有 JavaScript MVC 框架都不令人满意,公司就决定自己写一套,用来架设 Instagram 的网站 ...
- Linux操作系统学习笔记【入门必备】
Linux操作系统学习笔记[入门必备] 文章目录 Linux操作系统学习笔记[入门必备] 1.Linux入门 2.Linux目录结构 3.远程登录 3.1 远程登录Linux-Xshell5 3.2 ...
- JavaScript学习笔记之入门篇
JavaScript学习笔记之入门篇 JavaScript引入 1. 页面级 js: 2. 外部js文件: JavaScript变量 1. 变量的作用: 2. 声明变量: 3. 变量赋值: 4. 单一 ...
- javaSE学习笔记01 入门篇
javaSE学习笔记01 入门篇 java语言概述 Java背景知识 java是 美国 sun 公司 在1995年推出的一门计算机高级编程语言. java早期称为Oak(橡树),后期改名为Java. ...
- dubbo入门学习笔记之入门demo(基于普通maven项目)
注:本笔记接dubbo入门学习笔记之环境准备继续记录; (四)开发服务提供者和消费者并让他们在启动时分别向注册中心注册和订阅服务 需求:订单服务中初始化订单功能需要调用用户服务的获取用户信息的接口(订 ...
- Java学习笔记系列-入门篇-计算机基础
Java学习笔记 Java学习笔记是一个持续更新的系列,工作多年,抽个空对自身知识做一个梳理和总结归纳,温故而知新,同时也希望能帮助到更多正在学习Java 的同学们. 本系列目录: 入门篇 计算机基础 ...
- Python学习笔记之入门基础
课程链接:Python入门教程--基础阶段_哔哩哔哩_bilibili Python学习笔记 注释 单行注释: * 多行注释: 1.多行前面加# 2."""注释信息&qu ...
- Swi-Prolog学习笔记(入门篇)
首先介绍一个学习swi-prolog 和amzi-prolog很靠谱的中文网站:http://hyry.dip.jp/tech/book/page/prolog/search_game_maxmin. ...
最新文章
- SAP WM初阶之MIGO过账后自动调用LT06事务代码
- 记一次用iview实现表格合并单元格的具体操作
- linux替换每个英文字开头为大写,shell脚本,文件里面的英文大小写替换方法。...
- P4735-最大异或和【可持久化Trie】
- CD Linux U盘启动办法
- iOS 高效 Mac 配置
- 那些年删过的库,跑过的路,你从中找到解决方法了吗?
- mp.weixin.php,GitHub - temberature/mp-php-sdk: 微信公众平台第三方授权php开发包, weixin mp developer SDK....
- 当当(Elastic-job)分布式定时任务
- matepad和鸿蒙,华为MatePadPro配置速看:搭载了鸿蒙系统的它真比iPadPro强?
- CruiseControl 安装配置
- 如何把python代码翻译成中文-Python:谷歌翻译20次的程序如何实现?
- “驱动程序在 \Device\Harddisk0\D 上检测到控制器错误”的根本解决办法!
- 国外量化投资经典案例介绍
- private的使用
- archlinux安装QQ微信
- 12000字解读安踏:DTC中国化的“热血战纪”
- 扫拖地机器人预留_扫地机器人需要注意几个点?拖扫组合受追捧!
- 3.2 一个对象从创建到回收的整个过程(从类加载到GC),能掌握这个基本就没什么太大的问题;
- Java程序员如何写简历,给大家一个小建议?
热门文章
- Highmaps上海地区地图数据JSON格式
- 数据库|如何解决数据库插入中文字体时显示问号
- iconfont symbol引用,展示彩色字体图标
- 广播模块加继电器怎么接线_智能继电器模块如何接线?
- php滚动抽奖程序,PHP滚动抽奖代码
- Win10 使用python和ffmpeg批量合并音视频
- C语言中a=b=c,a=b==c,a==(b=c),a==(b==c)的简单分析
- 今日更新53个网络安全资料
- proe服务器高速缓存位置,proe选项设置整理(适合proe中高级水平).doc
- 浙江工商大学计算机专业考研分数,浙江工商大学2021考研分数线已公布