MATLABの無名関数で分岐処理
MATLABでmap処理したいときに無名関数で分岐処理したいなと思ったら三項演算子もないしif文も使えないしどうすればいいのか調べてたらどうやらfeval使えばいいみたいなので使い方を忘備録として書く。
どうやらMATLABの無名関数は副作用のない純粋関数として設計されているらしい。
% 奇数の場合0を返し偶数の場合2倍にして返す関数 f = (@(num) ... feval((@ (list, index) list{index}), ... {0, num*2}, ... ( (mod(num, 2)==1)*1 + (mod(num, 2)==0)*2 ))); % arrayfunで配列の要素にfを適用させる result = arrayfun(f, 1:100);
(mod(num, 2)==1)*1 + (mod(num, 2)==0)*2
この奇数の場合1を返し偶数の場合1を返す式をindexとして{0, num*2}
のcell配列に添え字としてアクセスしている。