2011-02-04 131 views
7

我具有矩阵A使得如何根据条件替换某些列值?

A= 
    4.0000 120.0000 92.0000   0   0 37.6000 0.1910 30.0000 
    10.0000 168.0000 74.0000   0   0 38.0000 0.5370 34.0000 
    10.0000 139.0000 80.0000   0   0 27.1000 1.4410 57.0000 
    1.0000 139.0000 60.0000 23.0000 846.0000 30.1000 0.3980 59.0000 
    5.0000 136.0000 72.0000 19.0000 175.0000 25.8000 0.5870 51.0000 
    7.0000 121.0000   0   0   0 30.0000 0.4840 32.0000 

我想要做两两件事:

  1. 替换是大于5由0
  2. 在第二的第一列的值列,如果值在121-130范围内,则将它们替换为0.如果它们在131-140范围内,则用1,1替换为1,1 141-150,3等等。

所以期望的结果矩阵将是:

A= 
    4.0000 0.0000 92.0000   0   0 37.6000 0.1910 30.0000 
    0.0000 4.0000 74.0000   0   0 38.0000 0.5370 34.0000 
    0.0000 1.0000 80.0000   0   0 27.1000 1.4410 57.0000 
    1.0000 1.0000 60.0000 23.0000 846.0000 30.1000 0.3980 59.0000 
    5.0000 1.0000 72.0000 19.0000 175.0000 25.8000 0.5870 51.0000 
    0.0000 0.0000   0   0   0 30.0000 0.4840 32.0000 

我该如何做到这一点?

我是想这样的事情:

counter=1; 
for i = 1: rows 
    if A(i,1) > 5 
     A(i ,1) = 0; 
    end 
    if A(i,2) > 120 && A(i,2) < 130 
     A(i ,2) = 0; 
    end 
    counter = counter+1; 
end 

会使用的情况下做的伎俩?

+0

边缘值130怎么样?那会是0还是1? – gnovice 2011-02-04 05:41:56

+0

不好意思说,边缘会是0,131-140会是1,141-150 2 – cMinor 2011-02-04 05:46:49

回答

11

您可以修改的A第2列,像这样:以上

A(A(:,1) > 5,1) = 0;    %# Set values in column 1 greater than 5 to 0 
A(:,2) = fix((A(:,2)-121)./10); %# If the values in column 2 are all 120 or 
           %# greater you can shift, scale, then round 
           %# them towards 0 to get the new values 

使用matrix indexingvectorized operations以避免循环或case语句。

相关问题