我有一个来自实验数据的数据集。 我可以找到最大值的位置,但我需要找到一种方法: 找到最大值后,截断数据集,或使系列的其余部分为0。 我正在使用以下可能但不起作用。
我将mod_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),:) = []
答案 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)
。但是,不要循环。你可以使用索引来完成所有这些操作。