2012-05-21 46 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,看看它是否更接近你想要做的。