条件を初めて満たす時の行数を知りたい
21 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
[1 4 6 7 2 7 8 9; 2 1 0 5 1 0 2 3 ] のような行列があった時、各行において初めて5を越えるのは何列目?という問題に答えられるコードを教えてください。
今回なら(3,4)と返して欲しいです。
0 Kommentare
Antworten (2)
Hernia Baby
am 11 Mär. 2022
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 Kommentar
Hernia Baby
am 11 Mär. 2022
ちなみに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
am 11 Mär. 2022
Bearbeitet: Atsushi Ueno
am 11 Mär. 2022
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 Kommentare
Hernia Baby
am 11 Mär. 2022
Bearbeitet: Hernia Baby
am 11 Mär. 2022
(a - a + 1)は行列をつくるためですね。たしかにones(size(a))だと冗長かも…cumsumでナンバリングしてゼロディバイドでInfに飛ばすのは面白いですね
Siehe auch
Kategorien
Mehr zu Annotations finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!