Использование оператора if для заполнения матрицы - PullRequest
1 голос
/ 06 ноября 2019

У меня есть файл .csv, который включает в себя два столбца, и каждый столбец имеет матрицу размером 68x1. Чтобы прочитать файл, я использую этот код:

filename1= 'myfile.csv';
[d1,tex]= xlsread(filename1);
b=d1(:,1);

Я хотел бы принять некоторые значения, используя if. Я написал:

if b<=4.5&&b<60
    X=2*b+5
elseif b>=60
    X=3*b-6
end

Однако, это не работает. Как я могу это сделать?

1 Ответ

3 голосов
/ 06 ноября 2019

В вашем примере b - это вектор. Оператор b <= 4.5 выводит логический вектор, который нельзя использовать с двойным амперсандом с коротким замыканием && и другим логическим вектором.

Я также собираюсь предположить, что у вас была опечатка, потому чтоb<60 всегда верно, если b<=4.5, думаю, вы имели в виду b>=4.5.

У вас есть два варианта:

  1. Поместите это в цикл

    for ii = 1:numel(b)
        if b(ii) >= 4.5 && b(ii) < 60
            X(ii) = 2*b(ii) + 5;
        elseif b >= 60
            X(ii) = 3*b(ii) - 6;
        end
    end
    
  2. Чем больше MATLAB-esque способ будетчтобы воспользоваться векторизацией, обратите внимание на один амперсанд &:

    X = NaN( size(b) );
    X( b >= 4.5 & b < 60 ) = 2*b + 5;
    X( b >= 60 ) = 3*b - 6; 
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...