[問題]要算四個限制內的個數應該怎麼寫才好?

看板MATLAB作者 (仕倖)時間11年前 (2014/03/10 10:47), 編輯推噓2(205)
留言7則, 2人參與, 最新討論串1/1
小弟剛入門不久請高手們見諒(並非求怎麼寫,而是怎麼寫會寫的比較好) 我先說我要做什麼,然後我怎麼做,請教高手們你們會怎麼做,讓我有一個方向。 小弟有一個名稱為ear的371422*4矩陣 第一直行為x座標 x=ear(:,1); 第二直行為y座標 y=ear(:,2); 第三直行為年分t座標 t=ear(:,3); %出現的數字有1991~2000(年) 第四直行為月份t座標 m=ear(:,4); %出現的數字有1~12(月) 把座標以0.1為區間作為網格,所以我想知道的是框框裡面在某時間點的出現次數。 畢竟要算某3*3框框內的數值,故要用x,y範圍吧?(如100>x & x<101 & y>25 & y<30) 若我想用迴圈一次生成: 「每半年在某x,y範圍內的值,並分別以矩陣(T,N)表示」 (直行為第N個框框,列為第T時間內) 框框位置: ┌─┬─┬─┐ │ 1│4 │7 │ ├─┼─┼─┤ │ 2│5 │8 │ ├─┼─┼─┤ │ 3│6 │9 │ └─┴─┴─┘ 我是有寫過了,方法就和下面所說的一樣,然後再寫成迴圈。 但是這樣要分成每半年、每一季(三個月)、每一個月就有點困難。 【不知道我下列方法方向有沒有錯誤?還是有更好的寫法?】 -------------------分隔線--------------------- 因為if不太熟所以我直接用邏輯符號打來乘... 原先我只要求「每年」就可以了,不用每半年,所以我就 先設t0=1991:2000; 我是用length + find函數來算在t=t0年分時, 有多少個在xa~xa+0.1~ya~yb-0.1網格框框內的資料 length(find(x.*(t==t0(1))>xa & x.*(t==t0(1))<x+0.1 & y.*(t==t0(1))>ya & ... y.*(t==t0(1))<y-0.1→因為我網格框框的排列要和Matlab預設的一樣,所以用減的。 【算條件個數不知道有沒有更好的寫法?】 然後再用for迴圈寫出每年分的1~9格個數。 但這種寫法年份還簡單,但是一碰到要算半年,或一季這種我就不知道該怎麼寫了。 感覺就要用if寫比較好(寫了好幾天都寫不太出來...)。 我是有想到分成上半年、下半年,一次做,在交換矩陣位置就好了(雖然頗麻煩...), 因為最後要plot所以才這樣寫。 【不知道有沒有推薦我一個方向該怎麼寫或想法會比較好。】 以下是我寫迴圈的方式已改成1樓所說的方式 t0=1991:2000; m0=7; %區分半年位置上半年<7,下半年>=7 A_nzhu=zeros(3); for m=1:length(t0) nA_zonehu(m)=sum(x>xa & x<xa+0.5 & y>ya & y<ya+0.5 & t==t0(m) & mon<7); for k1=1:3 for k2=1:3 A_nzhu(k2,k1)=sum(x>x0+(k1-1)*0.1 & x<x0+0.1*k1 & y>y0-0.1*k2... & y<y0-(k2-1)*0.1 & t==t0(m) & mon<7)/nA_zonehu(m); eval(['A_RIhu', num2str(t0(m)), '= A_nzhu']); end end end A_thu_RI=reshape(cat(3,A_RIhu1991,A_RIhu1992,A_RIhu1993,A_RIhu1994,... A_RIhu1995,A_RIhu1996,A_RIhu1997,A_RIhu1998,A_RIhu1999,A_RIhu2000),9,[]); 這樣只得到所有年度"上半年"的9格資料 下半年還要再寫一次... 那要得到每月的話...不就更麻煩??? 謝謝! 不知道這樣會不會太伸手牌...我想說只是問一個方向@@ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.141.150.30 ※ 編輯: h10840206 來自: 220.141.150.30 (03/10 10:51)

03/10 10:57, , 1F
sum(x>xa & x<xa+0.1 & y>ya & y<ya+0.1 & t==t0(1))
03/10 10:57, 1F

03/11 09:07, , 2F
那我迴圈寫出來只能分開寫上半年和下半年,要怎麼寫才可
03/11 09:07, 2F

03/11 09:08, , 3F
以寫出矩陣是[1991上半 1991下半 1992上半 1992下半...]
03/11 09:08, 3F

03/11 09:08, , 4F
不然我現在的是[1991上 1992上...]和[1991下 1992下...]
03/11 09:08, 4F

03/11 09:09, , 5F
兩個9*10的矩陣,再分開拼在一起@@ 可是那我要分每月的
03/11 09:09, 5F

03/11 09:11, , 6F
話 我要12次@@ 請問該怎麼寫才能得到照時間順序的矩陣?
03/11 09:11, 6F
※ 編輯: h10840206 來自: 220.141.150.30 (03/11 09:24)

03/11 23:53, , 7F
矩陣可多維,eval沒什麼意義,也不用reshape。
03/11 23:53, 7F
文章代碼(AID): #1J7IUavx (MATLAB)
文章代碼(AID): #1J7IUavx (MATLAB)