Re: [問題]要給定矩陣中的值一個範圍
※ 引述《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
推
02/17 23:39, , 1F
02/17 23:39, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章