2011-02-04 132 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語句。

相關問題