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

조회 수: 31 (최근 30일)
Keiichi Ishikawa
Keiichi Ishikawa 2022년 3월 11일
댓글: Atsushi Ueno 2022년 3월 11일
[1 4 6 7 2 7 8 9; 2 1 0 5 1 0 2 3 ] のような行列があった時、各行において初めて5を越えるのは何列目?という問題に答えられるコードを教えてください。
今回なら(3,4)と返して欲しいです。

답변 (2개)

Hernia Baby
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 ]
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
Hernia Baby
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
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

댓글을 달려면 로그인하십시오.


Atsushi Ueno
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を越えるのは何列目?
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
Hernia Baby
Hernia Baby 2022년 3월 11일
편집: Hernia Baby 2022년 3월 11일
(a - a + 1)は行列をつくるためですね。たしかにones(size(a))だと冗長かも…cumsumでナンバリングしてゼロディバイドでInfに飛ばすのは面白いですね
Atsushi Ueno
Atsushi Ueno 2022년 3월 11일
"1行"にこだわってます。Cody中毒者なら更にコストの低い1行を挙げてくるはずです。

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 言語の基礎에 대해 자세히 알아보기

태그

제품


릴리스

R2021b

Community Treasure Hunt

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

Start Hunting!