我正在寻找相当于c#condition ? true-expression : false-expression
条件赋值的Matlab。我所知道的最多的是a = 5>2
,这是真的\假作业,
但是有任何一行条件分配
if condition a=1;else a=2; end
?
答案 0 :(得分:23)
对于数字数组,还有另一种解决方案 -
// 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
s无法正常工作。谨防!如果X
的元素为nan
,或Y
的元素为nan,则无论条件如何,您都会在NaN
中获得A
非常有用的推论:
您可以使用bsxfun
,其中COND
和X
/ Y
的大小不同。
A = bsxfun( @times, COND', X ) + bsxfun( @times, ~COND', Y );
例如COND
和X
/ Y
是不同长度的向量。
整洁呃?
答案 1 :(得分:22)
一行条件赋值:
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) = ...
中的所有位置。
{{1}}
等等......你可以用这些逻辑阵列做任何你期望的事情。
答案 2 :(得分:21)
Matlab没有三元运算符。你可以轻松编写一个能为你做这件事的功能:
function c = conditional(condition , a , b)
if condition
c = a;
else
c = b;
end
end