2015-10-06 129 views
2

我想在Matlab中向量化if語句,我不知道該怎麼做。我想爲正值賦值'N',爲負值賦值'S'。我想避免一個for循環,但這裏是我的代碼:Vectorize IF語句

LatDD = [23.0,12.3,-43.2,9.9,-40.7]; 
LatDir = ['' '' '' '' '']; 
if (LatDD < 0) 
    LatDir = 'S' 
else 
    LatDir = 'N' 
end 

顯然,這不能做我想做的,因爲它確實只檢查LatDD的第一要素。我可以很容易地做一個循環,但我希望它是矢量化的。我嘗試了邏輯索引,但是所有讓我得到的是另一個帶零或零的向量,無論如何我都必須檢查for循環。

回答

5

你可以在這裏使用邏輯索引,你就必須做兩次

LatDD = [23.0,12.3,-43.2,9.9,-40.7]; 
LatDir = ['' '' '' '' '']; 

LatDir(LatDD < 0) = 'S'; 
LatDir(LatDD >= 0) = 'N'; 

既然你在這裏有一個二元選擇,你甚至可以通過預填LatDir所有'N',只是改變那些跳過了一步對應於負LatDD'S'

LatDD = [23.0,12.3,-43.2,9.9,-40.7]; 
LatDir = ['N' 'N' 'N' 'N' 'N']; 

LatDir(LatDD < 0) = 'S'; 
+0

完美的作品!謝謝 – dreed75

2

這裏是一個班輪 -

char('S'*(LatDD<0) + 'N'*(~(LatDD<0))) 

採樣運行 -

>> LatDD = [23.0,12.3,-43.2,9.9,-40.7]; 
>> LatDir = ['' '' '' '' '']; 
>> char('S'*(LatDD<0) + 'N'*(~(LatDD<0))) 
ans = 
NNSNS 
+0

這也適用,但對於像我這樣的初學者來說,這是令人困惑的。感謝您的回答。它幫助我和其他人學習技巧。 – dreed75