「ブロック機能」のリニューアルについて

matlabで条件をみたしたデータの総数を数えることは可能ですか?

例として2×5の以下の行列

1 3 0 2 0
1 0 1 2 1

の一行目で0以上の値を持ったデータの総数を知りたいとき(答えは3)

初心者なのでわからないことだらけで困っています。

よろしくお願いします。

.

教えて!goo グレード

A 回答 (4件)

三度Kulesです。


なるほど、そういうことでしたらANo.2さんの書かれたsumを使う方法がよいでしょう。
sumは合計を出す次元を指定することができますので、
sum(A>0,2)とすれば行ごとの要素数が出ます。
ちなみに列ごとの要素数を出したければ
sum(A>0,1)とすればよいです。

繰り返し、と書かれていますが、Matlabの場合各関数の使い方をよくみてみると
forループなどのループ構文を使わなくても書ける場合が多いです。

以上、参考になれば幸いです。
    • good
    • 0
この回答へのお礼

解決しました!

何回も質問に回答していただき本当にありがとうございました!!

お礼日時:2010/09/17 17:07

再びKulesです。


>再び質問して恐縮なのですが行ごとに繰り返し0より大きいデータの総数を知りたいときにはどのようにすれば良いのでしょうか。

別に行ごとに繰り返さなくても、findの関数はインデックスを一行で出しますので、
length(find(A>0))
でOKです。
参考になれば幸いです。

この回答への補足

ご返答ありがとうございます。

大変申し訳ございません。質問の仕方がおかしかったです。

kulesさんの返答は全体の0より大きいデータの総数を知ることが出来るってことですよね。

行ごとの0より大きいデータの数を繰り返し求めたいときはどうしたら良いのでしょうか。

たびたび申し訳ございませんがどうかよろしくお願いします。

補足日時:2010/09/17 15:23
    • good
    • 0

答えの一例を示します.



例に挙げていただいた2×5の行列をAとすると,
答えは

sum(A(1,:) > 0)

で得られます.
以下,解説.

A(1,:) 行列のAの一行目
A(1,:) > 0 行列Aの1行目の成分のうち,0より大きな成分を1に,それ以外の成分を0に書き換えたもの
sum ベクトルの成分の和を計算する関数

この回答への補足

たいへんありがとうございます。sum関数でもできるのですね。

確認したら見事できました。

再び質問して恐縮なのですが行ごとに繰り返し0より大きいデータの総数を知りたいときにはどのようにすれば良いのでしょうか。

よろしくお願いします。

補足日時:2010/09/17 13:08
    • good
    • 0
この回答へのお礼

解決しました。どうもありがとうございます!

お礼日時:2010/09/17 17:05

まあ他にもいろいろやり方はあると思いますが、私はたいていの場合次のように書きます。


length(find(A(1,:)>0))
ちなみにですけど「0以上」ではなく「0より大きい」ですよね?
ちょっとだけ解説すると
A(1,:)…行列Aの1行目
find(F)…Fが真であるインデックスを返す(今回だと[1,2,4])
length(B)…行列Bの長さを返す
まあこれらの関数についてもっと詳しく知りたければコマンドウィンドウで
help 関数名
とタイプすれば見れると思います。

参考になれば幸いです。

この回答への補足

たいへんありがとうございます。あっ、「0より大きいです」。すみません。

確認したら見事できました。

再び質問して恐縮なのですが行ごとに繰り返し0より大きいデータの総数を知りたいときにはどのようにすれば良いのでしょうか。

よろしくお願いします。

補足日時:2010/09/17 13:07
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング