知道在找到最大值后截断数据集

时间:2014-03-04 20:25:34

标签: matlab

我有一个来自实验数据的数据集。 我可以找到最大值的位置,但我需要找到一种方法: 找到最大值后,截断数据集,或使系列的其余部分为0。 我正在使用以下可能但不起作用。

我将mod_data_1作为我的新数据集,从N=1N_max

mod_data_1 = data_1;


N_max = find(data_1(:,2) == max(data_1(:,2)));
N_max(1);

for N=1;size (data_1,2);
 if data_1(N,1) > N_max;
   mod_data_1 (N,:)=0;
 end
end
mod_data_1(all(mod_data_1==0,1),:) = []

2 个答案:

答案 0 :(得分:1)

您的代码中似乎有很多错误。如果要将小于最大值的所有值设置为0,if data_1(N,1) > N_max应为if data_1(N,1) < N_max。你也在循环中使用分号错误。请参阅下面的更正代码:

mod_data_1 = data_1; 
N_max = find(data_1(:,2) == max(data_1(:,2)));
N_max(1);

for N=1:size(data_1,2)
 if data_1(N,1) < N_max
   mod_data_1 (N,:)=0;
 end
end
mod_data_1(all(mod_data_1==0,1),:) = []

答案 1 :(得分:1)

而不是find(D == max(D))方法使用max的第二个输出:

[~,N_max] = max(data_1(:,2));

方便地,它返回第一个出现的最大值的索引:

  

如果第一个非单一维度的值包含多个最大元素,则返回第一个的索引。


然后,截断:

data(N_max+1:end,:) = [];

或者,如果您想设置为零,请执行data(N_max+1:end,:) = 0;

或制作副本而不是截断原文:

mod_data_1 = data(1:N_max,:);

关于您的代码,请注意for N=1:size(data_1,2)遍历列数,因此不适合data_1(N,1)索引。要循环遍历行,您需要size(data_1,1)。但是,不要循环。你可以使用索引来完成所有这些操作。