在MATLAB的大单元阵列中定位多个零点值
问题描述:
我在编写一个MATLAB代码时需要定位一个单元格阵列的每个单元格的最大值,vel_data
,1x430
单元格,它包含多个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的单元中的所有零,然后使用f2,f3提取两个值。 – Shin
问题是,我认为这种方法,提取整个单元格数组的最大值,而我需要这个提取数组中每个单元格的最大值。此外,我第一次尝试运行这个代码产生了:使用horzcat的错误;从max_vel {n}行开始,连接的矩阵的维数不一致。 – Shin
你能解释更多关于数据吗?如果您提供简单的缩小大小示例和预期输出,它非常有用。 – rahnema1