matlab循环遍历数组_Matlab-访问for循环中最⼤值的索引,并
使⽤它从数组中删除值...
我想递归地到⼀系列矩阵中的最⼤值(第8列,具体),然后使⽤该最⼤值的索引来设置数组中的所有值,索引最⼤为NaN的最⼤索引(对于列14:16) . 很容易到最⼤值和索引,但是使⽤for循环为多个数组做这件事我很难过 .
如果没有for循环,我就可以这样做:
[C,Max] = max(wy2000(:,8));
wy2000(1:Max,14:16) = NaN;
[C,Max] = max(wy2001(:,8));
wy2001(1:Max,14:16) = NaN;
[C,Max] = max(wy2002(:,8));
wy2002(1:Max,14:16) = NaN;
等等等等...
以下是我尝试使⽤for循环的两种⽅法:
startyear = 2000;
endyear = 2009;
for n=startyear:endyear
currentYear = sprintf('wy%d',n);
[C,Max] = max(currentYear(:,8));
currentYear(1:Max,14:16) = NaN;
end
这是我尝试的另⼀种⽅法,使⽤eval函数
for n=2000:2009;
currentYear = ['wy' int2str(n)];
var2 = ['maxswe' int2str(n)];
eval([var2 ' = max(currentYear(:,8))']);eval是做什么的
end
在这两种情况下,问题似乎是MATLAB不能将'currentYear'变量识别为与我已在⼯作区中创建的wyXXXX对应的数组 .
根据Peters的回答,这⾥有⼀些关于我的数据的更多信息 . 我开始使⽤名为all_data的数据矩阵,其中包含16列数据,涵盖1982年⾄2012年的时间段 . 我只对2000 - 2009年期间感兴趣,我也有兴趣每年分析(2000年,2001年) ,...,2009) .
为了将数据分成⼏年,我使⽤以下代码:
for n=2000:2009;
s = datenum(n-1,10,1);
e = datenum(n,9,30);
startcell = find(TIME(:,7)==s);
endcell = find(TIME(:,7)==e);
var1 = ['wy' int2str(n)];
eval([var1 '= all_data3(startcell:endcell,:)']);
eval(['save ', var1]);
end
为了澄清,我感兴趣的是10/1 / YEAR1到9/30 / YEAR2期间,⽽TIME是⼀个包含数据⽇期和时间的矩阵 . 所以在上⾯的for-loop结束时,每个⽔年(wy)都有⼀个新的矩阵 . 然后,我想到最⼤积雪的⽇期(第8列),并从我的分析中排除该⽇期之前的所有数据 . 这是原始问题的来源 .
Peter的解决⽅案有效,但我希望到⼀个更简单的解决⽅案来到最⼤⽇期并将该⽇期之前的值设置为NaN,⽽不必声明⼀堆变量(或单元数组中的条⽬) .
如果我可以编写⼀个循环来创建Peter建议的基于开始和结束年份的单元格数组,那将使代码可以转移到其他数据集,但是当我尝试这样做时,我遇到的问题是索引为cell-array是1:length(years),但wy数组是根据实际年份命名的,因此使⽤eval函数时会出现不⼀致 .
马特

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。