2012-05-21 47 views
0
 for s=1:length(C_tem) 
     for w=1:length(C_tem{s}) 
      if (abs(C_tem{s}{w}) >= 0) 
       C_tem{s}{w} = 1; 
      else 
       C_tem{s}{w} = 0; 
      end 
      end 
     end 

我想设置大于0的值为1,如果小于或等于0,但由于某种原因,这不起作用。 我是matlab新手,如果可能,我真的很需要帮助。预先感谢您..设置值为二进制

+0

您是否必须使用细胞基质?如果你不这样做会容易得多 – Dan

回答

3

我没有带MATLAB的很多工作,但这部分代码感觉可疑 -

if (abs(C_tem{s}{w}) >= 0) 
       C_tem{s}{w} = 1; 
      else 
       C_tem{s}{w} = 0; 
      end 

为什么你在这里做腹肌?我认为它会从数字中删除符号。代码应该是这样的 -

if (C_tem{s}{w} > 0) //I have removed abs and >= is replaced with > 
       C_tem{s}{w} = 1; 
      else 
       C_tem{s}{w} = 0; 
      end 
0

abs(x)>=0对x的所有值都成立。简单的答案是删除abs。丹的评论跟上了更完整的答案。单元阵列在内层是不必要的。如果你有一个常规数组的单元阵列,那么你可以为整个代码块做这件事。

for s=1:length(C_tem) 
    C_tem{s} = (C_tem{s} >= 0); 
end 

两件事情,以通知:比较运算符矢量,这意味着它们返回相同大小的矩阵作为输入,从而在一次比较的所有值。而且,运算符的输出为1,其中为真,0为假。

另外看内置函数sign,看看它是否更接近你想要做的。