- ベストアンサー
matlabで条件をみたしたデータの総数を数えることは可能ですか?
matlabで条件をみたしたデータの総数を数えることは可能ですか? 例として2×5の以下の行列 1 3 0 2 0 1 0 1 2 1 の一行目で0以上の値を持ったデータの総数を知りたいとき(答えは3) 初心者なのでわからないことだらけで困っています。 よろしくお願いします。 .
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
三度Kulesです。 なるほど、そういうことでしたらANo.2さんの書かれたsumを使う方法がよいでしょう。 sumは合計を出す次元を指定することができますので、 sum(A>0,2)とすれば行ごとの要素数が出ます。 ちなみに列ごとの要素数を出したければ sum(A>0,1)とすればよいです。 繰り返し、と書かれていますが、Matlabの場合各関数の使い方をよくみてみると forループなどのループ構文を使わなくても書ける場合が多いです。 以上、参考になれば幸いです。
その他の回答 (3)
- Kules
- ベストアンサー率47% (292/619)
再びKulesです。 >再び質問して恐縮なのですが行ごとに繰り返し0より大きいデータの総数を知りたいときにはどのようにすれば良いのでしょうか。 別に行ごとに繰り返さなくても、findの関数はインデックスを一行で出しますので、 length(find(A>0)) でOKです。 参考になれば幸いです。
補足
ご返答ありがとうございます。 大変申し訳ございません。質問の仕方がおかしかったです。 kulesさんの返答は全体の0より大きいデータの総数を知ることが出来るってことですよね。 行ごとの0より大きいデータの数を繰り返し求めたいときはどうしたら良いのでしょうか。 たびたび申し訳ございませんがどうかよろしくお願いします。
- tanakarakusamoti
- ベストアンサー率20% (13/62)
答えの一例を示します. 例に挙げていただいた2×5の行列をAとすると, 答えは sum(A(1,:) > 0) で得られます. 以下,解説. A(1,:) 行列のAの一行目 A(1,:) > 0 行列Aの1行目の成分のうち,0より大きな成分を1に,それ以外の成分を0に書き換えたもの sum ベクトルの成分の和を計算する関数
お礼
解決しました。どうもありがとうございます!
補足
たいへんありがとうございます。sum関数でもできるのですね。 確認したら見事できました。 再び質問して恐縮なのですが行ごとに繰り返し0より大きいデータの総数を知りたいときにはどのようにすれば良いのでしょうか。 よろしくお願いします。
- Kules
- ベストアンサー率47% (292/619)
まあ他にもいろいろやり方はあると思いますが、私はたいていの場合次のように書きます。 length(find(A(1,:)>0)) ちなみにですけど「0以上」ではなく「0より大きい」ですよね? ちょっとだけ解説すると A(1,:)…行列Aの1行目 find(F)…Fが真であるインデックスを返す(今回だと[1,2,4]) length(B)…行列Bの長さを返す まあこれらの関数についてもっと詳しく知りたければコマンドウィンドウで help 関数名 とタイプすれば見れると思います。 参考になれば幸いです。
補足
たいへんありがとうございます。あっ、「0より大きいです」。すみません。 確認したら見事できました。 再び質問して恐縮なのですが行ごとに繰り返し0より大きいデータの総数を知りたいときにはどのようにすれば良いのでしょうか。 よろしくお願いします。
お礼
解決しました! 何回も質問に回答していただき本当にありがとうございました!!