条件を初めて満たす時の行数を知りたい
21 ビュー (過去 30 日間)
古いコメントを表示
[1 4 6 7 2 7 8 9; 2 1 0 5 1 0 2 3 ] のような行列があった時、各行において初めて5を越えるのは何列目?という問題に答えられるコードを教えてください。
今回なら(3,4)と返して欲しいです。
0 件のコメント
回答 (2 件)
Hernia Baby
2022 年 3 月 11 日
find で解決できます
ただ今回の例題ですと、5を超えるものは2行目には存在しません
こういったケースも踏まえてcell型でfind関数を適用します
a = [1 4 6 7 2 7 8 9; 2 1 0 5 1 0 2 3 ]
idx = a > 5
for ii = 1:height(a)
b{ii} = find(idx(ii,:),1);
end
b
1 件のコメント
Hernia Baby
2022 年 3 月 11 日
ちなみに5以上ならcell型にする必要はありません
各行ごとに該当する列があるからです
先の回答は各行に当てはまる数値がないケースがあるため、cell型を使用しています
a = [1 4 6 7 2 7 8 9; 2 1 0 5 1 0 2 3 ];
idx = a >= 5
for ii = 1:height(a)
b(ii) = find(idx(ii,:),1);
end
b
Atsushi Ueno
2022 年 3 月 11 日
編集済み: Atsushi Ueno
2022 年 3 月 11 日
a = [1 4 6 7 2 7 8 9; 2 1 0 5 1 0 2 3];
b = (a - a + 1) ./ (a >= 5) .* cumsum(a - a + 1, 2) % 各行において初めて5を越えるのは何列目?
min(b') % 今回なら(3,4)と返して欲しいです:(a > 5)⇒(a >= 5)にしました
2 件のコメント
Hernia Baby
2022 年 3 月 11 日
編集済み: Hernia Baby
2022 年 3 月 11 日
(a - a + 1)は行列をつくるためですね。たしかにones(size(a))だと冗長かも…cumsumでナンバリングしてゼロディバイドでInfに飛ばすのは面白いですね
参考
カテゴリ
Help Center および File Exchange で Annotations についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!