在MATLAB中在大单元数组中定位多个零值

时间:2016-12-08 04:01:20

标签: arrays excel matlab loops indexing

我在编写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 

非常感谢任何建议/示例代码。

1 个答案:

答案 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