0

我正在尝试找到最大值及其位置。以下是该程序的示例,

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取最后一个文件的值。

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

4

2 回答 2

1

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

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

于 2013-05-17T21:53:24.853 回答
1

每次运行 for 循环时,您都会用最近加载的 phen 的最大值从 3 的维度覆盖 M。由于您的数据只是二维的,您可能应该使用 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);
于 2013-05-17T21:58:39.743 回答