我正在寻找Matlab中类似于c#的condition ? true-expression : false-expression
条件赋值的等效方法。我目前了解的最多的是a = 5>2
,这是一个真/假赋值,但是否有一行代码的条件赋值可以代替if condition a=1;else a=2; end
?
我正在寻找Matlab中类似于c#的condition ? true-expression : false-expression
条件赋值的等效方法。我目前了解的最多的是a = 5>2
,这是一个真/假赋值,但是否有一行代码的条件赋值可以代替if condition a=1;else a=2; end
?
对于数字数组,还有另一种解决方案 --
// C:
A = COND ? X : Y;
成为
% MATLAB
% A, X and Y are numerics
% COND is a logical condition.
A = COND.*X + (~COND).*Y ;
优点:
对于向量或大型数组,可以并行工作 - 每个元素在符合条件的情况下都会被分配到A
中。同一行代码适用于以下情况:
X
和Y
大小相等警告:
不支持处理NaN
,请注意!如果X
的某个元素是nan
,或者Y
的某个元素是nan
,则无论条件如何,A
中都将得到一个NaN
。
非常实用的推论:
当COND
和X
/Y
具有不同的大小时,可以使用bsxfun
。
A = bsxfun( @times, COND', X ) + bsxfun( @times, ~COND', Y );
这个示例适用于COND
和X
/Y
长度不同的向量。
很简单,对吧?
一行条件赋值:
a(a > 5) = 2;
这是逻辑索引的一个示例,a > 5
是一个逻辑(即布尔或二进制)矩阵/数组,与 a
的大小相同,在表达式为真的位置上具有 1
。上述赋值语句的左侧指的是 a
中所有位置,其中 a>5
具有 1
。
b = a > 5; % if a = [9,3,5,6], b = [1,0,0,1]
a(~b) = 3;
c = a > 10;
a(b&c) = ...
等等......你可以通过这样的逻辑数组做任何你预期的事情。
a(b&c) = 1;
和 a(b~=c) = 0;
或者 a(xor(b,c)) = 0
。 - reve_etrangeb = a > 5;
后,变量 b
的值是多少? - 425nesp2
赋值给a
,否则不执行任何操作? - loleloMatlab没有三元运算符。不过您可以轻松编写一个函数来实现这样的功能:
function c = conditional(condition , a , b)
if condition
c = a;
else
c = b;
end
end