我正在寻找一种更有效的方法来在MATLAB中完成一项简单的任务。我的代码有效但似乎对我想要完成的事情过于冗长。我有一个具有相应值的年份矩阵,其中可以重复多年。例如:
NULL
我想选择一系列年份并取第二列中所有值的平均值,这些值的年份在该范围内。我目前正在这样做的方式是
(*l)->prox=new;
我想知道是否有更好的方法来做到这一点。谢谢!
编辑:对于那些看着我写的这个可怕代码的人,不要做我做的任何事情。有关逻辑索引的描述,请参阅所选答案,这是在MATLAB中进行任何类型数据选择的正确方法。
答案 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
。