在MATLAB的大单元阵列中定位多个零点值

问题描述:

我在编写一个MATLAB代码时需要定位一个单元格阵列的每个单元格的最大值,vel_data1x430单元格,它包含多个excel表单,数据由M行×1列组成。我想提取最大值,以及该最大值之前和之后的每个值,直到第一个0达到新的单元阵列。在MATLAB的大单元阵列中定位多个零点值

例如如果数组中的第一个单元格为[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 

任何意见/示例代码将非常感激。

提取的第一个最大索引值为idx。然后将所有元素的索引提取为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 
+0

我想我明白你的意思了。要在提取最大值后查找最后一个零和第一个零,首先将最大值编入索引,然后提取包含0的单元中的所有零,然后使用f2,f3提取两个值。 – Shin

+0

问题是,我认为这种方法,提取整个单元格数组的最大值,而我需要这个提取数组中每个单元格的最大值。此外,我第一次尝试运行这个代码产生了:使用horzcat的错误;从max_vel {n}行开始,连接的矩阵的维数不一致。 – Shin

+0

你能解释更多关于数据吗?如果您提供简单的缩小大小示例和预期输出,它非常有用。 – rahnema1