作者susuyumi (鈴弓)
看板MATLAB
標題[問題] 比較數值的落點
時間Thu Jun 14 22:42:14 2012
有兩個矩陣a與c, 有一個亂數值b;
a矩陣內的元素為0到1的累積矩陣(詳見下例)。
想要判斷當b數值落在a矩陣元素內的區段時, 對應的c矩陣元素就記為1, 否則為0。
程式範例:
a = [0.3, 0.6, 0.85, 1];
b = rand(1);
c = zeros(1:4);
if b < a(1);
c(1) = 1;
else
c(1) = 0;
end
if b > a(1) && b <= a(2);
c(2) = 1;
else
c(2) = 0;
end
if b > a(2) && b <= a(3);
c(3) = 1;
else
c(3) = 0;
end
if b > a(3) && b <= a(4);
c(4) = 1;
else
c(4) = 0;
end
過去我有印象,好像可以透過多層if的判斷來寫, 但當下忘記要怎麼寫了...
所以只能用這種相對比較笨的方式來作多次if 判斷...
不曉得板上有誰能提供比較聰明 & 簡潔的寫法嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.123.213.195
1F:→ asklo:c=zeros(1,4)才對吧? elseif應能滿足你的需求 06/15 00:29
2F:→ susuyumi:1樓不好意思, 我打錯字了:p 不過elseif的話...想不透 06/15 01:09
3F:→ ejialan:你給的例子雖然不會遇到 但是應該還有一個可能是b>a(4) 06/15 04:13
4F:→ ejialan:這樣c維度應該是1x5 可以這樣[i,j]=sort([b a]);c=j==1 06/15 04:16
5F:→ ejialan:不過這樣會是>=與< 不知道你合不合用 06/15 04:18
6F:→ asklo:if b <= a(1) 06/15 07:12
7F:→ asklo: c(1)=1; 06/15 07:13
8F:→ asklo:elseif b > a(1) || b <= a(2) 06/15 07:13
9F:→ asklo: c(2)=1; 06/15 07:13
10F:→ asklo:elseif b > a(2) || b <= a(3) 06/15 07:15
11F:→ asklo: c(3)=1; 06/15 07:15
12F:→ asklo:else 06/15 07:15
13F:→ asklo: c(4)=1; 06/15 07:16
14F:→ asklo:end 06/15 07:16
15F:→ asklo:c本來就是一個zero vector, 不用特定再去判斷給0 06/15 07:17
16F:→ asklo:上述的 || 改成&&,打錯了~~ 06/15 07:19
17F:→ hebe0320:c(min(find(b<a)))=1 呢? 06/15 17:20
18F:→ hebe0320:不過是在b不會大於1的情況下唷~ 06/15 17:23
19F:推 ak075:find 06/15 23:30