Matlab条件赋值

sha*_*r_m 19 matlab

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

San*_*har 23

对于数字数组,还有另一种解决方案 -

// C: 
A = COND ? X : Y;
Run Code Online (Sandbox Code Playgroud)

% MATLAB
% A, X and Y are numerics 
% COND is a logical condition.

A = COND.*X + (~COND).*Y ;
Run Code Online (Sandbox Code Playgroud)

优点:

对于向量或大型数组并行工作 - 每个项目A都根据相应的条件进行分配.同一行适用于:

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

警告:

NaNs 优雅地工作.谨防!如果一个元素Xnan,或者一个元素Y为NaN,那么你会得到一个NaNA,任何情况下都要.

真有用的推论:

你可以使用bsxfun哪里CONDX/或Y有不同的大小.

A = bsxfun( @times, COND', X ) +  bsxfun( @times, ~COND', Y );
Run Code Online (Sandbox Code Playgroud)

例如,其中CONDX/ Y是不同长度的向量.

整洁啊?


rev*_*nge 22

一行条件赋值:

a(a > 5) = 2;
Run Code Online (Sandbox Code Playgroud)

这是逻辑索引的一个例子,a > 5是一个逻辑(即布尔或二进制)矩阵/数组,其大小a1表达式为真时的大小相同.上述赋值的左侧是指a其中a>5a的所有位置1.

b = a > 5; % if a = [9,3,5,6], b = [1,0,0,1]
a(~b) = 3;
c = a > 10;
a(b&c) = ...
Run Code Online (Sandbox Code Playgroud)

等等......你可以用这些逻辑阵列做任何你期望的事情.

  • 是否有可能投入其他? - 在两种情况下分配东西?喜欢:a(b&c)= 1:0; (2认同)

Pho*_*non 21

Matlab没有三元运算符.您可以轻松编写一个可以为您执行此操作的函数:

function c = conditional(condition , a , b)
    if condition
        c = a;
    else
        c = b;
    end
end
Run Code Online (Sandbox Code Playgroud)