Matlab条件赋值

时间:2011-06-20 09:28:53

标签: matlab

我正在寻找相当于c#condition ? true-expression : false-expression条件赋值的Matlab。我所知道的最多的是a = 5>2,这是真的\假作业,
但是有任何一行条件分配 if condition a=1;else a=2; end

3 个答案:

答案 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中的每个项都会根据相应的条件进行分配。同一行适用于:

  • 条件是标量,数组XY大小相等
  • condition是任意大小的数组,X和Y是标量
  • 条件,X和Y都是相同大小的数组

警告:

NaN s无法正常工作。谨防!如果X的元素为nan,或Y的元素为nan,则无论条件如何,您都会在NaN中获得A

非常有用的推论:

您可以使用bsxfun,其中CONDX / Y的大小不同。

A = bsxfun( @times, COND', X ) +  bsxfun( @times, ~COND', Y );

例如CONDX / 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