我在编写MATLAB代码时遇到一些麻烦,该代码需要找到我的一个单元格数组的每个单元格的最大值vel_data
,一个1x430
单元格,其中包含几个包含数据的excel表格M
行x 1
列。我想提取最大值,以及该最大值之前和之后的每个值,直到第一个0
到达新的单元格数组。
e.g。如果数组中的第一个单元格是[3 2 1 0 2 6 4 3 0 1 0]
,它将提取值[0 2 6 4 3 0]
,并对数组中的每个单元格执行此操作。
我知道以下提取了单元格数组的最大值,但我希望它能像我上面提到的那样。
d=dir(f);
for n=1:numel(d)
max_vel{n} = deal(max(vel_data{n}));
end
非常感谢任何建议/示例代码。
答案 0 :(得分:2)
提取为idx
的最大值的第一个索引。然后将0提取的所有元素的索引作为f1
。元素的索引为0且紧接在最大值提取为f2
之前。并且f3
是元素的索引,它是0,紧跟在最大值之后。
vel_data = {[3 1 0 2 6 4 0 1 0] , [1 1 0 9 3 0 4 6 9]}
for n=1:numel(vel_data)
data = vel_data{n};
[~,idx] = max(data);
f1 = find(data==0);
if isempty(f1)
max_vel{n} = data;
continue;
end
f2 = find(f1 < idx,1,'last');
f3 = find(f1 > idx,1);
if isempty(f2)
idx_first = 1;
else
idx_first =f1(f2);
end
if isempty(f3)
idx_last = numel(data);
else
idx_last =f1(f3);
end
max_vel{n} = data(idx_first:idx_last);
end