web-dev-qa-db-ja.com

MATLABの三項演算子

次のような場合に入力する方法があります:

var = (cond) ? true : false;

または、この形式を使用する必要がありますか?

if (cond)
 true
else
 false
end
26
Gün Karagöz

MatLabには、三項演算子や、1行のifステートメント用のその他の構文糖衣がありません。ただし、ifステートメントが非常に単純な場合は、とにかく1行で記述することができます。

if (cond); casetrue(); else; casefalse(); end

三項演算子ほど単純ではありませんが、5行のコードで記述するよりも優れています。

27

Trueまたはfalseのみが必要な場合は、MatlabSorterが提案することを実行できます。実際の三次演算子(つまり、a = b ? c : d)、MATLABにはありません。ただし、提供されているファイル here を使用すると、親しくなります。

11
Darhuuk

できるよ

var = 5 > 4;

varをtrueに設定します。必要なものを5> 4に置き換えてください。

9
MatlabSorter

うーん...誰もこれに言及していません

fi = @(varargin)varargin{end-varargin{1}}

ドキュメントのどこかに「終わり」が来ると書かれているので、これはより将来の証拠になります

fi = @(varargin)varargin{length(varargin)-varargin{1}}

使用法 :

fi(input('Do you like Matlab ? '),'yes','no')
>> no

インラインケースが必要な場合は、 Mathworks ...

8
Carel

MATLABには条件式はありませんが、状況によっては、たとえばvar = cond*true_expr + (1-cond)*false_exprと言うことで同様の効果を得ることができます。 Cの条件式とは異なり、これはもちろん両方のtrue_exprおよびfalse_expr、およびcondが0または1でない場合(注:falseは0のように動作し、trueは1のように動作します)、おかしな結果が得られます。

8

交換

c = (x ? a : b)

沿って

c = subsref({b; a}, substruct('{}', {x + 1}))

xはブール値または1または0でなければなりません。
trueまたは1が選択されます
falseまたは0はbを選択します
これは、セルに含めることができるすべてのもので動作するはずであり、複雑なフォーミュラでも使用できます!

1
Juergen S.

私はこのスタイルを頻繁に使用します:

cond = what < ever;

n = getfield([23,42], {1+(what < ever)}) % for any 1x1-data
s = cell2mat(getfield({'no','yes'}, {1+(what < ever)})) % for nonuniform

ヘルパー関数を必要としないほどコンパクトです

1
rascr