Как я могу заменить некоторые значения столбца в зависимости от условия? - PullRequest
7 голосов
/ 04 февраля 2011

У меня есть матрица 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, 141-150 на 2, 151-160 на 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

Будет ли использование дела делать трюк?

1 Ответ

11 голосов
/ 04 февраля 2011

Вы можете изменить первые 2 столбца A следующим образом:

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

Выше используется матричная индексация и векторизованные операции , чтобы избежать циклов или операторов case.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...