当前位置: 代码迷 >> 其他开发语言 >> matlab 中 ym1(ym1<一) = 1; xm1(xm1<1) = 1;什么意思
  详细解决方案

matlab 中 ym1(ym1<一) = 1; xm1(xm1<1) = 1;什么意思

热度:3383   发布时间:2013-02-26 00:00:00.0
matlab 中 ym1(ym1<1) = 1; xm1(xm1<1) = 1;什么意思
   %-- bounds checking  
    ym1(ym1<1) = 1; xm1(xm1<1) = 1;              
    yp1(yp1>dimy)=dimy; xp1(xp1>dimx) = dimx; 
请高手解释,以上函数什么意思?  
------解决方案--------------------------------------------------------
matlab的向量化操作在你这短短几句中表现的淋漓尽致

例如:一个x(可以是一维向量,也可以是矩阵,二维,三维,多维均可),其值域为[0,2],现在想要将x中小于1的值全部置1,
其他语言的解法是循环,前提是你要知道x到底是几维,因为几个维度,你需要写几层循环,简单的,以2维矩阵为例:

// 其他类c语言
for(int i=0;i<row;++i)
    for(int j=0;j<col;++j)
        if(x(i,j)<1) x(i,j) = 1;

如果是多维,那循环的层数更多,在matlab中,这样写完全没错,也可以运行,但是不能体现matlab矩阵操作的优势,
因此,matlab引入了向量化来简化对于矩阵的操作(你这里的操作只是向量化最简单的一个例子),matlab的find函数可以一次找到所有满足条件的下标,然后用下标一次完成操作,例如
// matlab code
idx = find(x<1);
x(idx) = 1;

在后来的版本中,matlab更是直接提供了简便方法,由于直接比较可以返回boolean矩阵,matlab也开始支持boolean矩阵作为下标来赋值,因此,将x中所有小于1的元素赋值为1可以进一步简化为:
// matlab code2
x(x<1) = 1;

是不是很简单?现在回头来看你的4个语句:

ym1(ym1<1) = 1; // ym1中所有小于1的元素置1
xm1(xm1<1) = 1;  // xm1中所有小于1的元素置1
yp1(yp1>dimy)=dimy; // yp1中所有大于dimy的元素赋值为dimy
xp1(xp1>dimx) = dimx; //xp1中所有大于dimx的元素赋值为dimx 


探讨matlab,写matlab程序,可以加我q: 790404545
  相关解决方案