matlab高效编程技巧(一)

本文总结了MATLAB编程中的一些高效技巧,包括基于矩阵化索引的逻辑判断和数值查找,使用sum和cumsum进行条件求和,以及异常值的简单判断。强调了矩阵作为基本处理对象的向量化编程思想,以提高代码运行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

相信在地统计实验课程结束后本科阶段再接触matlab可能不会特别多了,后面会更加偏向于专业方向上的编程语言,因此本篇博客算是对接触matlab到现在积累的一些编程技巧做出一个总结,但是需要总结的有很多,因此将其分为一个系列,让大家领悟到matlab编程的基本处理对象是矩阵,而不是矩阵中具体的元素,实现真正的向量化(矩阵化)编程。

1 技巧介绍与案例实践

1.1基于矩阵(向量)化索引

matlab矩阵的索引的基础可以是值可以是向量a(i,j)其中的iiijjj都可以是向量也可以是矩阵,并且其可以是逻辑值也可以是索引的数值,举一些实用的例子说明如下:

  • 基于逻辑矩阵索引

    代码讲解:其中a>3是一个逻辑判断语句,会发现返回的是一个0-1的布尔型矩阵,之后对其中a>3的地方进行重新赋值为0

  • 基于逻辑矩阵索引进阶版

    其中对条件进一步约束如下,把其中a>3并且a<5的值赋为0,其中因为将两个逻辑矩阵分别括号再进行相加减,逻辑矩阵会自动转化为数值矩阵的double类型,因此再后面需要用logical函数将其转为逻辑矩阵,条件更加复杂的形式依次类推。

  • 返回数值索引–find函数

    其中find函数的用法如果返回的是[m,n]基于行列号的矩阵,那么目标值就位于索引中,第一列是行数,第二列是列数,例如第一列第一行,第二列第一行,如果返回只有一个变量,那么就将返回按照列索引的顺序序号,其先将第一列索引结束之后,再对第二列索引,因此第5个值是7,大于3符合条件

  • 基于矩阵与矩阵配对索引

    如果我们相对第二行的1,4两列索引,第3行的1,4两列同时索引,那么直接将其索引(i,j)写成矩阵的形式,那么返回的将是其对应的值。

  • 基于(end, : )结合高级索引

    如果我们想要返回矩阵的第1列到倒数第2列的所有值则用a(:,1:end-1)
    如果我们想要返回矩阵的第2行到最后一行的所有值则用a(2:end,:)

1.2求和技巧(sum,cumsum)

  • 按行与列求和

    一般来说sum(a,1),sum(a,2)分别是对列求和,对行求和,默认情况下是对列求和,

  • 基于条件求和,求数目

    sum(a<3)是统计各列符合条件的个数,sum(a(a<3))则是对其符合条件的元素求和

  • 累积求和

    其中cumsum是累积求和,默认情况下对列累积求和,如想对行累积求和,同sum用法

1.3异常值简单判断

异常值主要有NaN,Inf以及把异常值删除的操作

对其中nan(未知)值替换为9999,isnan函数是用来判断元素是否是nan。
将其中第4列大于99的行删除a(a(:,4)>99,:)=[]

3总结

本次高效编程技巧主要讲解的是matlab索引,求和以及异常值判断以及去除的高效编程技巧,希望大家能够尽量少用for循环,能不用就尽量不用,除非到了不能基于向量化编程的地步就用,从此提高代码运行效率,自从对matlab的索引以及向量化编程掌握之后,潘老师写的for循环越来越少,代码的效率也越来越高。

附录

a=[5,4,3,2;7,5,6,9;1,2,5,4];
a>3
a(a>3)=0;
a
a=[5,4,3,2;7,5,6,9;1,2,5,4];
logi=(a>3)+(a<5)-1
logi=logical(logi)
a(logi)=0
a=[5,4,3,2;7,5,6,9;1,2,5,4];
find(a>3)
[m,n]=find(a>3);
[m,n]
a=[5,4,3,2;7,5,6,9;1,2,5,4];
a([2;3],[1;4])

a=[5,4,3,2;7,5,6,9;1,2,5,4];
a(:,1:end-1)
a(2:end,:)

a=[5,4,3,2;7,5,6,9;1,2,5,4];
sum(a,1)
sum(a,2)
a
sum(a<3)
sum(a(a<3))

a=[5,4,3,2;7,5,6,9;1,2,5,4];
a
cumsum(a)
cumsum(a,2)

a=[5,4,3,2;7,5,6,9;1,2,5,nan];
a
isnan(a)
a(isnan(a))=9999

id=a(:,4)>99
a(id,:)=[]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值