专栏首页钟绍威的专栏矩阵的基本知识构造重复矩阵的方法——repmat(xxx,xxx,xxx)构造器的构造方法单位数组的构造方法指定公差的等差数列指定项数的等差数列指定项数的lg等差数列sub2ind()从矩阵索引==》

矩阵的基本知识构造重复矩阵的方法——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就是跟数学打交道,编程的份量小了好多,搞到我这个刚学到定积分的大一渣渣搞不懂矩阵的秩是什么

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 谁说 Java 要过时?2017年Java 大事件一览及未来前瞻

    在过去的一年中,Java 历经了许多变化。在今年年初,Java EE 处于一个不确定的状态,Java 9 版本也推迟了它的发布日期。在 2016 年的 Java...

    企鹅号小编
  • java项目 远程debug

    AVA项目无法像PHP那样可以随时修改文件内容进行调试,调试可以借助eclipse,本地代码的话很容易在本地debug,但如果代码已经打包部署在linux上呢?...

    千往
  • java array to list

    背景 想把数组转为list,使用list的判断元素是否存在的方法,结果发现一个坑,int类型的数组失败了  步骤 public static void main...

    千往
  • Java8新特性第3章

    Stream作为Java8的新特性之一,他与Java IO包中的InputStream和OutputStream完全不是一个概念。Java8中的Stream是对...

    企鹅号小编
  • Java设计模式之模板方法设计模式(银行计息案例)

           不知道为什么,这几天对Java中的设计模式非常感兴趣,恰巧呢这几天公司的开发任务还不算太多,趁着有时间昨天又把模板方法模式深入学习了一下,做了一个...

    赵小忠
  • 多线程编程:阻塞、并发队列的使用总结

    最近,一直在跟设计的任务调度模块周旋,目前终于完成了第一阶段的调试。今天,我想借助博客园平台把最近在设计过程中,使用队列和集合的一些基础知识给大家总结一下,方便...

    赵小忠
  • 单点登录系统实现

    单点登录系统实现基于SpringBoot 今天的干货有点湿,里面夹杂着我的泪水。可能也只有代码才能让我暂时的平静。通过本章内容你将学到单点登录系统和传统登录系统...

    企鹅号小编
  • 从插件重构看如何提升测试质量与效率

    几个月前技术侧发起了一轮手机管家小火箭的重构,目的是为了更好地梳理小火箭的代码架构逻辑,方便以后更好地提高开发效率和开发质量。

    腾讯移动品质中心TMQ
  • java匿名内部类

    show the code : package com.test.jwen.httpApiAuto; public class AInter { publ...

    千往
  • 如何使用线程锁来提高多线程并发效率

           今天对synchronized关键字的用法又有了更高一层的理解,特此记录一下。        一直对自己设计的多通道做单不是狠满意,并发效率低下。...

    赵小忠

扫码关注云+社区

领取腾讯云代金券