MATLAB:在给定范围内选择所有数组EXCEPT

时间:2012-06-15 16:29:02

标签: arrays matlab matrix matrix-indexing

我想对不属于特定范围的数组内容执行指标。

例如,我有一个包含1000行和2列的数组。我想对一列中的所有元素(比如列#2)执行mean()计算,这些元素不属于50-150,250-300,400-700和900-950行。

因此,平均值应根据第1-49,151-249,301-399,701-899和951-1000行计算。

任何想法如何解决这个问题?

编辑:我应该指出,每次运行程序时,包含的项目都会更改。因此,我不能仅仅对内含物进行硬编码;他们需要根据排除情况制定出来。

2 个答案:

答案 0 :(得分:6)

怎么样:

M = rand(1000,2);
idx = setdiff(1:size(M,1), [50:150, 250:300, 400:700, 900:950]);

MM = M(idx,:)

现在将任何函数应用于过滤后的矩阵:

mean(MM,1)

答案 1 :(得分:0)

您可以定义排除范围,然后使用逻辑寻址:

LowerLimit1 = 1;
UpperLimit1 = 50;

LowerLimit2 = 151;
UpperLimit2 = 249;

LowerLimit3 = 301;
UpperLimit3 = 399;

LowerLimit4 = 701;
UpperLimit4 = 899;

LowerLimit5 = 951;
UpperLimit5 = 1000;

MyVector = MyMatrix(:,2);

MeanValue = mean(MyVector(~(MyVector > LowerLimit1 & MyVector < UpperLimit1) | (MyVector > LowerLimit2 & MyVector < UpperLimit2) |  (MyVector > LowerLimit3 & MyVector < UpperLimit3)  | (MyVector > LowerLimit4 & MyVector < UpperLimit4) | (MyVector > LowerLimit5 & MyVector < UpperLimit5)));