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

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

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

网易考拉推荐

浅析MATLAB中的数组结构  

2011-08-16 11:02:36|  分类: M&M |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
这件事基于以下一个有趣的问题:
请编写一个M函数,该函数接受一个能被2或者3整出的正整数,创建一个矩阵,规则如下:
如果n能被2整除,例如8,则创建如下形式(2列):
     8     7
     6     5
     4     3
     2     1
如果n能被3整除,例如9,则创建如下形式(3列):
     9     8     7
     6     5     4
     3     2     1
对于同时能被2和3整除的数,简单看作是能被2整除,例如12:
    12    11
    10     9
     8     7
     6     5
     4     3
     2     1
问题很简单,代码如下:
function A=RH(n)
    if(mod(n,2)~=0&& mod(n,3)~=0)
        error('Invalid input, n must be deivded by 2 or 3');
    end
    A=n:-1:1;
    if mod(n,2)==0
        A=reshape(A,2,n/2);
        A=A';
    else
        A=reshape(A,3,n/3);
        A=A';
    end
end
下面的事情就显得有点意思了。
原本我对reshape函数也不太熟悉,不过还是知道有这么个函数的,刚开始想简单使用A=reshape(A,n/2,2),但是结果却有点不同:
>> A=8:-1:1
A =
     8     7     6     5     4     3     2     1
>> reshape(A,4,2)
ans =
     8     4
     7     3
     6     2
     5     1
看到了吧?它是按列分配的。这个简单的问题向我们揭示了MATLAB中的数组的分配情况:多维数组实际上是按照列的顺序存放于内存中。
下面的一个例子很简单,但是更直接地揭示了这一事实:
>> magic(4)
ans =
    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1
>> ans(8)
ans =
    14
如果你按行数的话,则ans(8)应该是8才对,但是很不幸,你必须按列数才能得到正确的结果。
  评论这张
 
阅读(646)| 评论(0)
推荐 转载

历史上的今天

评论

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

页脚

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