条件を初めて満たす時の行数を知りたい

32 visualizaciones (últimos 30 días)
Keiichi Ishikawa
Keiichi Ishikawa el 11 de Mzo. de 2022
Comentada: Atsushi Ueno el 11 de Mzo. de 2022
[1 4 6 7 2 7 8 9; 2 1 0 5 1 0 2 3 ] のような行列があった時、各行において初めて5を越えるのは何列目?という問題に答えられるコードを教えてください。
今回なら(3,4)と返して欲しいです。

Respuestas (2)

Hernia Baby
Hernia Baby el 11 de Mzo. de 2022
find で解決できます
ただ今回の例題ですと、5を超えるものは2行目には存在しません
こういったケースも踏まえてcell型でfind関数を適用します
a = [1 4 6 7 2 7 8 9; 2 1 0 5 1 0 2 3 ]
a = 2×8
1 4 6 7 2 7 8 9 2 1 0 5 1 0 2 3
idx = a > 5
idx = 2×8 logical array
0 0 1 1 0 1 1 1 0 0 0 0 0 0 0 0
for ii = 1:height(a)
b{ii} = find(idx(ii,:),1);
end
b
b = 1×2 cell array
{[3]} {1×0 double}
  1 comentario
Hernia Baby
Hernia Baby el 11 de Mzo. de 2022
ちなみに5以上ならcell型にする必要はありません
各行ごとに該当する列があるからです
先の回答は各行に当てはまる数値がないケースがあるため、cell型を使用しています
a = [1 4 6 7 2 7 8 9; 2 1 0 5 1 0 2 3 ];
idx = a >= 5
idx = 2×8 logical array
0 0 1 1 0 1 1 1 0 0 0 1 0 0 0 0
for ii = 1:height(a)
b(ii) = find(idx(ii,:),1);
end
b
b = 1×2
3 4

Iniciar sesión para comentar.


Atsushi Ueno
Atsushi Ueno el 11 de Mzo. de 2022
Editada: Atsushi Ueno el 11 de Mzo. de 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を越えるのは何列目?
b = 2×8
Inf Inf 3 4 Inf 6 7 8 Inf Inf Inf 4 Inf Inf Inf Inf
min(b') % 今回なら(3,4)と返して欲しいです:(a > 5)⇒(a >= 5)にしました
ans = 1×2
3 4
  2 comentarios
Hernia Baby
Hernia Baby el 11 de Mzo. de 2022
Editada: Hernia Baby el 11 de Mzo. de 2022
(a - a + 1)は行列をつくるためですね。たしかにones(size(a))だと冗長かも…cumsumでナンバリングしてゼロディバイドでInfに飛ばすのは面白いですね
Atsushi Ueno
Atsushi Ueno el 11 de Mzo. de 2022
"1行"にこだわってます。Cody中毒者なら更にコストの低い1行を挙げてくるはずです。

Iniciar sesión para comentar.

Categorías

Más información sobre 言語の基礎 en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2021b

Community Treasure Hunt

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

Start Hunting!