矩阵的基本知识构造重复矩阵的方法——repmat(xxx,xxx,xxx)构造器的构造方法单位数组的构造方法指定公差的等差数列指定项数的等差数列指定项数的lg等差数列sub2ind()从矩阵索引==》
要开始学Matlab了,不然就完不成任务了 java中有一句话叫作:万物皆对象 在matlab我想到一句话:万物皆矩阵 矩阵就是Java中的数组 不过矩阵要求四四方方,Java中的数组长和宽可以不同长度
一个有意思的矩阵——结构器
听到这个名词,我想到了构造函数#34 结构器有点像对象 具有不同的field属性(成员变量) 一个属性就相当于一个矩阵容器,所以为什么说万物皆矩阵呢,哈哈 不同于普通矩阵,结构器可以携带不同类型的数据(String、基本数据等等) 多维构造器 不同属性的长度不要求一致,不同维度的属性长度也不要求一致
构造重复矩阵的方法——repmat(xxx,xxx,xxx)
此方法可以用于将小矩阵拼接成大矩阵 repmat()有两种重载构造方法 1.repmat(variable,length),得到一个length*length的矩阵 2.repmat(variable,line,column)得到一个line*column的矩阵
下面演示一下方法的使用
repmat([12,34;56,78],2,3)
结果如下:
ans =
12 34 12 34 12 34
56 78 56 78 56 78
12 34 12 34 12 34
56 78 56 78 56 78
构造器的构造方法
构造器有四种构造方法
1.构造1*x的构造器
构造器名称(索引).属性=值
family.name='noble';
family.age=19;
family.sex='boy';
family(2).name='amy';
family(2).age=44;
family(2).sex='girl';
下面得到结果
这种方法太麻烦了
2.分别使用struct()函数构造
构造器名称(索引)=struct(变量名,值,变量名,值,变量名,值…)
family(索引)=struct('name','noble','age',19,'sex','boy')
下面得到结果
family =
name: 'noble'
age: 19
sex: 'boy'
这种方法也太麻烦了,要一个个去初始化
3.使用repmat()函数构造
构造器名称=repmat(strcuct(xxxxxx,xxxxx,xx,x,x),line,column)
familys=repmat(family,2,3)
下面得到结果:
familys =
2x6 struct array with fields:
name
age
sex
这里又和repmat(矩阵)一点不同 如果矩阵a长度为2*3,那么b=repmat(a,2,3),b的长度为4*9 但是一个构造器a的维度位2*3,那么b的维度也为4*9 不是把整个构造器看成是一个单位去repmat,而是把构造器的每一个维度看成是一个单位去repmat 这种方法可以,不过有个缺点,只能创建重复的构造器
4.使用struct()构造多维构造器
family=struct('name',{'noble','amy'},'age',{19,44},'sex',{'boy','girl'})
下面得到结果
family =
1x2 struct array with fields:
name
age
sex
猜想:是否可以用这种方法创建2*3的构造器
这种方法好,又短又能每个维度都初始化到
单位数组
单位数组与构造器有许多相同之处 相比于构造器,单位数组更像是一个Object类的数组(多态) 因为构造器是通过属性来引用的,单位数组是通过索引来引用的
单位数组的构造方法
单位数组有两种构造方法 {}是单位数组的标志
1.麻烦一点的,需要一个个单位去初始化
单位数组名称(索引)={值}
>> cell(1,1)={eye(2)};
>> cell(1,2)={[2,3,4,5;6,7,8,9]};
>> cell(2,1)={'haha'};
>> cell(2,2)={123};
结果如下
celldisp(cell)
cell{1,1} =
1 0
0 1
cell{2,1} =
haha
cell{1,2} =
2 3 4 5
6 7 8 9
cell{2,2} =
123
2.方便的方法
单位数组名称={xxx,xxx,xxx;xxx,xxx,xxx}
cell={eye(1),eye(2),eye(3);eye(4),eye(5),eye(6)}
结果如下
cell =
[ 1] [2x2 double] [3x3 double]
[4x4 double] [5x5 double] [6x6 double]
一种更详尽的输出cell方法 celldisp(单位数组名称)
将矩阵中某一行或某一列删除
比如将cell的第一行删除: cell(1,:)=[] %[]表示一个空矩阵
几种向量的创建
指定公差的等差数列
1.向量名=(首项,公差,尾项) 最后一项<|尾项-公差| 2.向量名=(首项,尾项) 相当于(首项,1,尾项) 所以尾项不能小于首项,否则返回空矩阵
指定项数的等差数列
linespace(首项,尾项,项数)
指定项数的lg等差数列
logs(a,b,项数) 首项为10^a,尾项为1^b
单下表引用矩阵元素
矩阵在内存中的储存形式并不是方形的,而是以列为优先
现有矩阵a
a =
1 2 3
4 5 6
7 8 9
则a(6)=8,矩阵在内存中的排列方式是先列后行
利用”:”访问矩阵中多个元素
a(1:2,2:3)%先行后列,多个列的话依次执行访问
ans =
2 3
5 6
a(2:3:9)%访问非相邻的元素
ans =
4 5 6 **这里的三个参数都是线性索引!!!**
线性索引《=》矩阵索引
sub2ind()从矩阵索引==》线性索引
sub2ind(size(矩阵名称),line,column) 原理是sub2ind([line,column],line,column)
ind2sub()从线性索引==》矩阵索引
ind2sub(size(矩阵名称),线性索引) 原理同上
稀疏矩阵(sparse matirx)
稀疏矩阵就是将矩阵中的零去掉,这样的话,有的矩阵有很多0,那么用稀疏矩阵就可以节省空间
稀疏矩阵的构造方法sparse()
1.sparse(已有矩阵名称) 2.sparse(i,j,s,m,n) i:非零值在普通矩阵中的行位置 j:非零值在普通矩阵中的列位置 s:非零值是多少 m:矩阵的行数 n:矩阵的列数
稀疏矩阵《==》普通矩阵
稀疏矩阵==》普通矩阵
full(稀疏矩阵名称)
普通矩阵==》稀疏矩阵
sparse(普通矩阵名称)
刚接触MATLAB的感想: 相对于java 创建变量方便了——不用声明,不用new,不用区分类型 有很多自带的处理方法——randi、randn、randsym、spdiags、spalloc,而且这些方法的名字还都看不懂是什么意思!!! API文档没有中文版!!help指令也是英文版的!!被虐死了 学习资料不全面,电子书和学习视频都不没有java完善 还有好多数学方法啊,感觉用MATLAB就是跟数学打交道,编程的份量小了好多,搞到我这个刚学到定积分的大一渣渣搞不懂矩阵的秩是什么
- SQL Server安全(2/11):身份验证(Authentication)
- SQL Server安全(3/11):主体和安全对象(Principals and Securables)
- 在SQL Server里如何进行页级别的恢复
- 你可能不知道的字符比较中的“秘密”
- c++实现简单计算器
- re模块(正则表达式)
- Python学习——collections系列
- 为stackGan一个工程创建一个虚拟环境,python 2.7 tensorflow0.12-tensorflow 1.01
- linux 普通操作,查看资源使用情况
- Python 函数使用记录,join函数和os.path.join用法
- 01.SQLServer性能优化之----强大的文件组----分盘存储
- stackGan实验
- pyTorch基础入门练习
- 昨天遇到的几个常用函数
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- ceph 运维操作-SCRUB
- ceph 分布式存储-块存储(RBD)搭建
- ceph 分布式存储-文件存储(CephFS)搭建
- 模拟 GROUP_CONCAT() 函数
- three.js 数学方法之Box3
- Redis Cluster服务平台化之路
- ceph分布式存储-对象存储(RGW)搭建
- 【PostgreSQL 架构】PostgreSQL 11和即时编译查询
- PG数量的预估
- ceph分布式存储-用户管理
- ceph分布式存储-检查集群健康状态
- ceph分布式存储-常见MON故障处理
- ceph分布式存储-常见OSD故障处理.md
- ceph分布式存储-常见 PG 故障处理
- ceph分布式存储-全局Ceph节点宕机处理