Sib*_*ing 2 matlab if-statement conditional-operator
在MATLAB中有这样的单线程吗?
if a > b
foo = 'r';
else
foo = 'g';
end
Run Code Online (Sandbox Code Playgroud)
Leo*_*tny 10
有包括在MATLAB if语句单行没有语法糖,但如果你的发言是非常简单的,你可以在一行写.
我以前在我的旧项目中有像这样的单行if语句:
if (k < 1); k = 1; end;
Run Code Online (Sandbox Code Playgroud)
在你的情况下,它看起来像:
if a > b; foo = 'r'; else; foo = 'g'; end;
Run Code Online (Sandbox Code Playgroud)
或者,如果你不喜欢分号
if a > b, foo = 'r'; else, foo = 'g'; end
Run Code Online (Sandbox Code Playgroud)
但是,并不像你想象的那么漂亮.
不像C风格的三元运算符那么优雅,但你可以利用matlab在这种情况下自动将逻辑转换为双精度的事实.所以你可以r通过条件(a > b)将你想要的结果乘以你的期望结果(在这种情况下),并将其添加到你想要的结果的产品中为假(即g),而不是你的条件:
foo = (a > b)*c + (~(a > b))*d
Run Code Online (Sandbox Code Playgroud)
所以如果我们放弃c = 'r',d = 'g'那么我们需要做的就是foo回到char最后:
char(foo)
Run Code Online (Sandbox Code Playgroud)
要么
char((a > b)*'r' + ~(a > b)*'g')
Run Code Online (Sandbox Code Playgroud)
请注意,这仅适用于c且d具有相同尺寸(因为+)...
尽量避免在matlab中使用if语句,只需将逻辑转换为(向量)数学:
foo = 1 + (a <= b)
Run Code Online (Sandbox Code Playgroud)
编辑:
对于更一般的情况,分配'r'或'g',您可以使用:
col = {'r', 'g'};
foo = col(1 + (a > b));
Run Code Online (Sandbox Code Playgroud)
因此,例如使用isGreen布尔值,您可以:
foo = col(1 + isGreen);
Run Code Online (Sandbox Code Playgroud)
这也可以是一个布尔返回函数
foo = col(1 + isGreen(a))
Run Code Online (Sandbox Code Playgroud)