注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

MATLAB中快速交换行或者列中的值  

2012-03-22 15:53:46|  分类: M&M |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

这个小技巧是在查看MATLAB的文档中发现的,使用这种方法不需要引入临时变量。以前看教材的时候没有注意,今天看代码很不理解,测试了一下才知道的。

例如有矩阵:

A =
     1     2     3     4
     5     6     7     8
     9    10    11    12
    13    14    15    16

使用命令:

A([1;3],:)=A([3;1],:)

将实现1,3行的交换。

A =
     9    10    11    12
      5     6       7      8
      1     2       3      4
    13    14    15   16

当然不用整行交换也是可以的,例如

A([1;3],[2 4])=A([3;1],[2 4])

将交换矩阵A的第1行、第1行中列为2和4的值,对于最开始的矩阵,

n=4;
A=reshape(1:n*n,n,n)'
A([1;3],[2 4])=A([3;1],[2 4])

输出结果是:

A =
     1     2     3     4
     5     6     7     8
     9    10    11    12
    13    14    15    16
A =
     1    10     3   12
     5     6     7     8
     9     2    11    4
    13    14    15    16

最后,既有行又有列的交换可以一次完成,例如:

n=4;
A=reshape(1:n*n,n,n)'
A([1;3],[1;3])=A([3;1],[3;1])

输出的结果是:

A =
     1     2     3     4
     5     6     7     8
     9    10    11    12
    13    14    15    16
A =
    11     2    9     4
     5     6     7     8
     3    10     1    12
    13    14    15    16
这个操作可以这么理解,是先交换了1,3行中位于1和3列的值,这个中间结果是:
    9     2     11     4
     5     6     7     8
     1    10   3    12
    13    14    15    16

然后再交换1,3列中位于1和3行中的值,就是最后的结果。

  评论这张
 
阅读(3977)| 评论(2)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016