alternative form for find(max(x))

Hi all!
I am trying to optimize my program by reducing the nested coding and perhaps "slow" functions such as find().
I have this:
gamma = 0.5
nodes = 5
if rand >= gamma
a = find(A(s(1),s(2),:) == max(A(s(1),s(2),:)),1);
else
a = randi(nodes);
end
A is a n x m x o matrix.
I was wondering if there's a different way to tackle this. I've looked at accum() but I don't seem to make it work properly. Thank you in advance!

 採用された回答

dpb
dpb 2020 年 4 月 4 日

0 投票

if rand >= gamma
[~,imx]=max(A(s(1),s(2),:);
a=imx;
else
a = randi(nodes);
end

2 件のコメント

Torsten
Torsten 2020 年 4 月 4 日
Is it ensured that imx gives the index of the first occurence of the maximum within A(s1,s2,:) ?
dpb
dpb 2020 年 4 月 4 日
編集済み: dpb 2020 年 4 月 4 日
I've never caught it doing otherwise altho not sure it is documented...
ADDENDUM: Actually it is...
"If the largest element occurs more than once, then I contains the index to the first occurrence of the value."

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeLoops and Conditional Statements についてさらに検索

製品

リリース

R2019b

タグ

質問済み:

2020 年 4 月 4 日

編集済み:

dpb
2020 年 4 月 4 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by