作者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