我需要一些帮助在此问题控制求出平均的参数由其他指数
我有这个矩阵在MATLAB:
A = [ 25 1.2 1
28 1.2 2
17 2.6 1
18 2.6 2
23 1.2 1
29 1.2 2
19 15 1
22 15 2
24 2.6 1
26 2.6 2];
第一栏是温某些测量值
第二列是表示颜色的索引代码(1.2:红色,.....等)
第3列是取样的小时。仅在从1到2
我想要的矩阵以通过第二列如下来控制小时:
如果是1.2,程序将找到所有温度的平均值在每小时1该
对应于1.2
所以,在这里(25 + 23)/ 2 = 24
并且还找出所有温度的平均值在2小时和对应
〜1.2,(28 + 29)/ 2 = 28.5
和这个平均值:
[24
28.5]
将在1小时替换所有温度值和2
对应于1.2。
然后,它为指数2.6同样的事情,15
因此,所需的输出将是:
B = [ 24
28.5
15.5
22
24
28.5
19
22
15.5
22]
我的问题是在使用循环。我只能在一次运行中为一个索引做到这一点。
例如,
T=[];
index=1.2;
for i=1:length(A)
if A(i,2)==index
T=[T A(i,1)];
else
T=[T 0];
end
end
因此,T是对应于1.2和其它项是零
然后将提取的T,我写长码查找平均和结束时我可以发现,仅对应于该索引1.2基质
:
B = [24
28.5
0
0
24
28.5
0
0
0
0]
但是,这只适用于一个索引,并为其他索引分配零。我可以在单独的运行所有
指数做到这一点,然后添加B的,但由于我的真实
矩阵是8760 5这将花费很长的时间。
我相信有一个更简单的方法来做到这一点。
感谢
问候
惊人。感谢您的帮助。BTW,我如何学习这种编码和逻辑索引?我在Matlab中有一些中等背景。你的代码是节省时间和精力的。我写了很长的如果和为了循环试图得到答案。谢谢。抱歉。我计算了17 + 24 = 30。你说得对。 – 2011-12-27 23:17:21
不客气:)我想不出任何具体的学习材料,除了经验之外,对于逻辑索引(从技术上讲,这不是逻辑索引,但这个想法是相同的)。以此为例,并尝试了解发生了什么,然后下次需要它时,它可能会派上用场。如果您不明白其中的任何内容,我很乐意尝试解释。 – dantswain 2011-12-28 00:05:49
你不需要使用find。以下应该给出相同的结果: match =(A(:, 2)== c)&(A(:, 3)== t); B(match)= mean(A(match,1)); – grantnz 2011-12-28 08:24:44