看板 MATLAB 關於我們 聯絡資訊
※ 引述《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
zxvc:嗯,你的程式寫法比較安全。 02/17 23:39