matlab 快捷的生成矩阵

今天师兄提出一个问题

要快速的生成如下的矩阵

11110.5
1110.50
110.500
10.5000
0.50000


我思考了一下,对于数据量不大的完全可以用循环来做,奈何本人有matlab综合症,不矩阵简化的话活不了

所以解答如下:

a=ones(5,5);提前申请矩阵空间
a=triu(a)-0.5*diag(ones(1,5));ones(1,5)生成diag对角线元素
a=fliplr(a);左右顺序颠倒
这个方法省去了繁琐的循环和判断赋值

下面对用到的函数和核心思想做简要说明:

1.matlab的核心在于矩阵,像一般的循环之类的都可以用内置函数(ones,meshgrid,linspace等)来代替,这样不仅代码简洁,还大大提高了代码运行效率,符合matlab矩阵至上的原则

2.提前申请矩阵空间和索引向量化或矩阵化是基本的原则

3.灵活转换->本文中代码先用ones生成5*5的全部元素为1的矩阵,然后用triu提取了上三角部分(包括对角线),然后用diag生成了对角线是0.5 的同样大小的矩阵,二者相减发现和想要的还有点差别,再发现用fliplr左右顺序颠倒一下就OK了。这个只要结构类似,能够各个部分分离的多几步转换就得到了想要的。


类似的操作在实际需求中很多,写下来和大家分享,窥一斑而见全豹,希望对大家有所启发。


原创,转载请注明来自http://blog.csdn.net/wenzhou1219

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值