作者cyliu (打杂小弟)
看板MATLAB
标题Re: [问题]要给定矩阵中的值一个范围
时间Sun Feb 17 16:25:02 2008
※ 引述《zxvc (百善孝为先)》之铭言:
: ※ 引述《lestelle (希望永远是晴天)》之铭言:
: : 请问各位高手,
: : 我要在一个矩阵中,让它的值介於一个范围
: : 例如 一个矩阵 a =[120 222 21 105 99]
: : 要令它变成另一个矩阵 a=[3 5 1 3 2]
: : 判断式如: a(a<=50) ==1;
: : a(50<a<=100) ==2;
: : a(100<a<=150) ==3;
: : a(150<a<=200) ==4;
: : a(200<a<=250) ==5;
: : 但是这个程式跑出来的答案是5,也就是 a= [5 5 5 5 5]
: : 请问各位高手我该怎麽改写呢?
: 请改成这样:
: a =[120 222 21 105 99]
: a(a<=50)=1;
: a(50<a & a<=100)=2;
: a(100<a & a<=150)=3;
: a(150<a & a<=200)=4;
: a(200<a & a<=250)=5
: 要用「程式码」指定一个范围不能用「数学上的范围」表示法,
: 因为它们的意义是不相同的。
: 50<a<=100程式码的意义是,先作50<a,然後得到一个逻辑向量,
: 0代表该元素不大於50、1代表该元素大於50。
: 然後逻辑向量再作<=100的比较,然後得到一个逻辑向量(全为1,因为0<=100、1<=100),
: 所以这并不是你要的结果。
: 总之,要知到「程式语言」与「数学语言」并不是都是一致的。
z网友长期在本版回答问题, 大家有目共睹, 这边我再接一点
比较无关紧要的咚咚好了.
原po的问题, z网友的解答非常有效率, 也节省不少memory
用量. 但也要小心 index的使用, 原因在於, 一旦找到相符
的逻辑index, 原先矩阵内的element就随即被更改, 在多重
逻辑运算之後, 如果後续条件又符合的话, 就有出错的可能.
我会建议建立另一个相同於a维度的矩阵, 然後来储存逻辑
运算的结果, 如果後续a 还要使用的话, 再把逻辑运算的矩
阵, 重新放回a.
eg:
b = NaN * size(a);
b(a<=50)=1;
b(50<a & a<=100)=2;
b(100<a & a<=150)=3;
b(150<a & a<=200)=4;
b(200<a & a<=250)=5
之後,
a = b; clear b;
当然啦, 我把话题扯远了, 原po需要的观念, 还是z网友已
经指出来的了. :)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 24.180.188.81
1F:推 zxvc:嗯,你的程式写法比较安全。 02/17 23:39