我试图找到最大值及其位置。以下是该计划的例子,
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正在取最后一个文件的值。
如何克服这个问题?任何帮助将不胜感激
答案 0 :(得分:1)
我不确定我理解你的问题。
但是,在每次迭代时,您都要计算最大值和位置,并在下一次迭代中覆盖它们(即不将它们存储在任何地方)。因此,在循环结束时M
和position
将对应于最后一个条目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);