我正在寻找相当于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都根据相应的条件进行分配.同一行适用于:
X和Y大小相等警告:
用NaNs 优雅地工作.谨防!如果一个元素X是nan,或者一个元素Y为NaN,那么你会得到一个NaN中A,任何情况下都要.
真有用的推论:
你可以使用bsxfun哪里COND和X/或Y有不同的大小.
A = bsxfun( @times, COND', X ) + bsxfun( @times, ~COND', Y );
Run Code Online (Sandbox Code Playgroud)
例如,其中COND和X/ Y是不同长度的向量.
整洁啊?
rev*_*nge 22
一行条件赋值:
a(a > 5) = 2;
Run Code Online (Sandbox Code Playgroud)
这是逻辑索引的一个例子,a > 5是一个逻辑(即布尔或二进制)矩阵/数组,其大小a与1表达式为真时的大小相同.上述赋值的左侧是指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)
等等......你可以用这些逻辑阵列做任何你期望的事情.
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)
| 归档时间: |
|
| 查看次数: |
45501 次 |
| 最近记录: |