Я хотел бы заменить элементы вектора, используя условие или функцию.Заменить векторные элементы, используя условие/if в matlab
a = [10 20 60];
если < 30 = 4 еще а = 5
результат должен выглядеть следующим образом:
б = [4 4 5]
Я хотел бы заменить элементы вектора, используя условие или функцию.Заменить векторные элементы, используя условие/if в matlab
a = [10 20 60];
если < 30 = 4 еще а = 5
результат должен выглядеть следующим образом:
б = [4 4 5]
Solution с помощью logical indexing
-
cond1 = a < 30
cond2 = a > 30
b = 4.*cond1 + 5.*(cond2) + a.*(~(cond1 | cond2))
Краткое описание:cond1
и cond2
образуют логические массивы на основе условий IF-ELSE
, которые используются для индексирования и образуют числовой массив «масштабированных» значений 4 or 5
, сохраняя при этом 30
.
Однострочник версия: Если вы в острот, это может питать интерес -
b = 4.*(a < 30) + 5.*(a > 30) + a.*(~(a > 30 | a < 30))
Пример # 1
a =
10 20 60 30
b =
4 4 5 30
Другой связанный интересный вопрос - Matlab: Remove IF-ELSE Conditional statements using Logical Indexing
Большое вам спасибо, что именно я искал, так как вы предложили, я также изучу логическое индексирование. С уважением – Crysthius
@Crysthius Awesome! Рад, что это сработало для вас. Посмотрите на «логическое индексирование», это мощный инструмент! Добавлено одно соединение в решении. – Divakar
Ваша помощь очень ценится. С уважением – Crysthius
Другая версия, использующая logical indexing:
a = [10 20 60];
b = a;
b(b < 30) = 4;
b(b >= 30) = 5;
Одна коррекция: последняя строка должна быть «больше или равна»: 'b (b> = 30) = 5;' – tkocmathla
кстати вы не указали, что вы хотите, чтобы произошло за номером 30. – Dan
Привет Дэн, я извиняюсь, я уже говорил вторую часть, если мой если заявление неправильно, я буду редактировать его. Спасибо, что отметили это как дубликат, однако я хотел бы упомянуть, что я предпочитаю ответ @Divakar. Однако он может изменить свой ответ, я думаю, после того, как я отредактировал свой вопрос. Я извиняюсь за неудобства. С уважением, – Crysthius