作者h10840206 (仕倖)
看板MATLAB
標題[問題]同時擁有四個條件的迴圈該怎麼寫才比較好?
時間Mon Mar 10 10:46:57 2014
小弟剛入門不久請高手們見諒(並非求怎麼寫,而是怎麼寫會寫的比較好)
我先說我要做什麼,然後我怎麼做,請教高手們你們會怎麼做,讓我有一個方向。
小弟有一個名稱為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)
推 sunev:sum(x>xa & x<xa+0.1 & y>ya & y<ya+0.1 & t==t0(1)) 03/10 10:57
→ h10840206:那我迴圈寫出來只能分開寫上半年和下半年,要怎麼寫才可 03/11 09:07
→ h10840206:以寫出矩陣是[1991上半 1991下半 1992上半 1992下半...] 03/11 09:08
→ h10840206:不然我現在的是[1991上 1992上...]和[1991下 1992下...] 03/11 09:08
→ h10840206:兩個9*10的矩陣,再分開拼在一起@@ 可是那我要分每月的 03/11 09:09
→ h10840206:話 我要12次@@ 請問該怎麼寫才能得到照時間順序的矩陣? 03/11 09:11
※ 編輯: h10840206 來自: 220.141.150.30 (03/11 09:24)
推 sunev:矩陣可多維,eval沒什麼意義,也不用reshape。 03/11 23:53