条件を初めて満たす時の行数を知りたい
조회 수: 31 (최근 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に飛ばすのは面白いですね
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!