[問題] 比較數值的落點

看板MATLAB作者 (鈴弓)時間13年前 (2012/06/14 22:42), 編輯推噓1(1018)
留言19則, 5人參與, 最新討論串1/1
有兩個矩陣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

06/15 00:29, , 1F
c=zeros(1,4)才對吧? elseif應能滿足你的需求
06/15 00:29, 1F

06/15 01:09, , 2F
1樓不好意思, 我打錯字了:p 不過elseif的話...想不透
06/15 01:09, 2F

06/15 04:13, , 3F
你給的例子雖然不會遇到 但是應該還有一個可能是b>a(4)
06/15 04:13, 3F

06/15 04:16, , 4F
這樣c維度應該是1x5 可以這樣[i,j]=sort([b a]);c=j==1
06/15 04:16, 4F

06/15 04:18, , 5F
不過這樣會是>=與< 不知道你合不合用
06/15 04:18, 5F

06/15 07:12, , 6F
if b <= a(1)
06/15 07:12, 6F

06/15 07:13, , 7F
c(1)=1;
06/15 07:13, 7F

06/15 07:13, , 8F
elseif b > a(1) || b <= a(2)
06/15 07:13, 8F

06/15 07:13, , 9F
c(2)=1;
06/15 07:13, 9F

06/15 07:15, , 10F
elseif b > a(2) || b <= a(3)
06/15 07:15, 10F

06/15 07:15, , 11F
c(3)=1;
06/15 07:15, 11F

06/15 07:15, , 12F
else
06/15 07:15, 12F

06/15 07:16, , 13F
c(4)=1;
06/15 07:16, 13F

06/15 07:16, , 14F
end
06/15 07:16, 14F

06/15 07:17, , 15F
c本來就是一個zero vector, 不用特定再去判斷給0
06/15 07:17, 15F

06/15 07:19, , 16F
上述的 || 改成&&,打錯了~~
06/15 07:19, 16F

06/15 17:20, , 17F
c(min(find(b<a)))=1 呢?
06/15 17:20, 17F

06/15 17:23, , 18F
不過是在b不會大於1的情況下唷~
06/15 17:23, 18F

06/15 23:30, , 19F
find
06/15 23:30, 19F
文章代碼(AID): #1FsVX8Y1 (MATLAB)