在matlab中使用条件/如果替换向量元素

Cry*_*ius 1 matlab replace vector conditional-statements

我想使用条件或if函数替换向量的元素。

a = [10 20 60];

如果a <30 = 4否则a = 5

结果需要如下所示:

b = [4 4 5]

Div*_*kar 5

解决方案使用logical indexing-

cond1 = a < 30
cond2 = a > 30
b = 4.*cond1 + 5.*(cond2) + a.*(~(cond1 | cond2))
Run Code Online (Sandbox Code Playgroud)

简短说明: cond1cond2根据IF-ELSE条件形成逻辑数组,用于索引并形成 的“缩放”值的数值数组4 or 5,同时保持30.

单线版:如果您喜欢单线版,这可能会引起您的兴趣-

b = 4.*(a < 30) + 5.*(a > 30) + a.*(~(a > 30 | a < 30))
Run Code Online (Sandbox Code Playgroud)

示例#1

a =
    10    20    60    30
b =
     4     4     5    30
Run Code Online (Sandbox Code Playgroud)

另一个相关的有趣问题 - Matlab:使用逻辑索引删除 IF-ELSE 条件语句


scl*_*e81 5

使用逻辑索引的另一个版本:

a = [10 20 60];

b = a;
b(b < 30) = 4;
b(b >= 30) = 5;
Run Code Online (Sandbox Code Playgroud)