作者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)
1F:推 sunev:sum(x>xa & x<xa+0.1 & y>ya & y<ya+0.1 & t==t0(1)) 03/10 10:57
2F:→ h10840206:那我回圈写出来只能分开写上半年和下半年,要怎麽写才可 03/11 09:07
3F:→ h10840206:以写出矩阵是[1991上半 1991下半 1992上半 1992下半...] 03/11 09:08
4F:→ h10840206:不然我现在的是[1991上 1992上...]和[1991下 1992下...] 03/11 09:08
5F:→ h10840206:两个9*10的矩阵,再分开拼在一起@@ 可是那我要分每月的 03/11 09:09
6F:→ h10840206:话 我要12次@@ 请问该怎麽写才能得到照时间顺序的矩阵? 03/11 09:11
※ 编辑: h10840206 来自: 220.141.150.30 (03/11 09:24)
7F:推 sunev:矩阵可多维,eval没什麽意义,也不用reshape。 03/11 23:53