在MATLAB中从二维时间序列数据中找到最大索引

时间:2013-05-17 21:17:55

标签: matlab

我试图找到最大值及其位置。以下是该计划的例子,

fname = dir('*.mat');
nfiles = length(fname);
vals = cell(nfiles,1);

phen = cell(nfiles,1);

for i = 1:nfiles

    vals{i} = load(fname(i).name);
    phen{i} = (vals{i}.phen);
    [M, position] = max(phen{i},[],3);
    clear vals

end

程序执行后,所有位置都显示1.总共有15个文件,M正在取最后一个文件的值。

如何克服这个问题?任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

我不确定我理解你的问题。

但是,在每次迭代时,您都要计算最大值和位置,并在下一次迭代中覆盖它们(即不将它们存储在任何地方)。因此,在循环结束时Mposition将对应于最后一个条目phen{nfiles}

答案 1 :(得分:1)

每次执行for循环时,都会用3的维度覆盖M中最近加载的phen的max。因为您的数据只是二维的,所以您可能应该使用1或2的维度而不是3.因为你使用3,所以max返回1到位置。修复尺寸问题和位置应该是正确的值。

你可以做的是制作M并定位nfiles的大小。而不是

[M, position] = max(phen{i},[],3);

%create M and positions arrays here
%ex. M(nfiles) = 0; or a smaller value if your values are negative
%do the same for positions
[M(i), positions(i)] = max(phen{i},[],1); %1 or 2 correction here here!

然后在你的for循环之后

...
end
[maxM, maxMposition] = max(M);
position = positions(maxMposition);