有条件地选择矩阵行

时间:2017-07-24 19:40:16

标签: arrays matlab

我正在寻找一种更有效的方法来在MATLAB中完成一项简单的任务。我的代码有效但似乎对我想要完成的事情过于冗长。我有一个具有相应值的年份矩阵,其中可以重复多年。例如:

NULL

我想选择一系列年份并取第二列中所有值的平均值,这些值的年份在该范围内。我目前正在这样做的方式是

(*l)->prox=new;

我想知道是否有更好的方法来做到这一点。谢谢!

编辑:对于那些看着我写的这个可怕代码的人,不要做我做的任何事情。有关逻辑索引的描述,请参阅所选答案,这是在MATLAB中进行任何类型数据选择的正确方法。

1 个答案:

答案 0 :(得分:0)

那里有太多的步骤。只需使用您想要的索引并取平均值即可。像这样:

values = [1910 1.04;1910 2.53;1910 0.94;1911 2.13;1911 5.32];
index = values(:,1) == 1910;
av = mean(values(index, 2));

对于这种情况av = 1.503333333333

要保存这些东西(以后不要删除所有内容),请执行此操作。

stuffToKeep = values(index,:);
stuffToKeep = values(values(:,1) == 1910,:); % 1-liner if you don't want to save the index

如果您想保留以后的信息,只需保存索引并在需要时调用它。

years = unique(values(:,1));
% then find all the values that match each year
[~, yearIndex] = ismember(values(:,1), years);
% use the index
mean(values(yearIndex == 1,2)); % same as before average of 1910
mean(values(yearIndex == 2,2)); % average of 1911

范围是什么?同样的逻辑。

index = values(:,1) >= 1910 & values(:,1) <= 1920;
mean(values(index,2)); %average of values between 1910 and 1920 inclusive.

以下是来自Mathworks人员的良好example索引。另请尝试在帮助中输入logical indexing