![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
MATLAB という汎用数値解析プログラムを使っています。
現在、100×100の配列の中にランダムな数字(0~40)が入ったデータを扱っています。
しかし、中にはマイナスの値や100を超える値も時々入ってしまっています。
できれば0~40の間の値の中で平均値や最大・最小値を算出したいと考えています。
この外れ値を計算せず(もしマイナスや40以上ならその値は無かったことにして)平均値等を出すことは可能でしょうか?
if文なども考えたのですが、いまいち書き方が分からず困っています。
どうかご回答よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
こんな感じ
>> B = rand(5)
B =
0.8147 0.0975 0.1576 0.1419 0.6557
0.9058 0.2785 0.9706 0.4218 0.0357
0.1270 0.5469 0.9572 0.9157 0.8491
0.9134 0.9575 0.4854 0.7922 0.9340
0.6324 0.9649 0.8003 0.9595 0.6787
>> ind = find((B>0.5) & (B<0.8))
%%%% 行列 B の中から, 0.5 < B < 0.8 のインデックスを取り出す.
ind =
5
8
19
21
25
>> A = B(ind)
A =
0.6324
0.5469
0.7922
0.6557
0.6787
A の平均とか min max を取る.
ただし,B の行列としての 2次元情報が消えるので,
それを生かしたいときはもう少し工夫が必要.
ありがとうございます。
2次元情報自体は使用せず、平均や標準偏差が欲しかったのでこれで十分です。
色々勉強したいところなんですけど、しばらくそこに割ける時間が無いので本当に助かりました。
No.2
- 回答日時:
まあ確かに先の回答者さんが書かれている通り、二重のforループを使ってやる分には
C言語なんかでも初級編ぐらいの問題なので自分でして欲しいところなんですが、
Matlab風なやり方を少しでもするなら、
Aを100×100の行列として
B=A(:);
とすればBはAと同じ値が入った10000×1の行列になります(私が前回の回答で書いたものです)ので、
forループは一重で済みますね。
もうひとつMatlabの特徴として、配列のインデックスの代わりにlogicalが直接使えるというものがあります。
つまり、例えばCを1×5の行列だとすると、
D=C([1,3,5]);とするのとD=C[true;false;true;false;true]);
とするのは同じ結果を返してくれます。
この2つのことを使えば、forループを一度も使わずに求めることができますね。
これ以上は自力でやった方がいいでしょう。
特に2つ目の事実はその手の本を読まないとわからないところです
(最初のうちは読んでも意味がわからないと思います。私もMatlabに触り始めた頃はそうでした)
が、ここから先は普通のプログラムの話なので自分で書かないと力がつきません。
参考になれば幸いです。
No.1
- 回答日時:
まあ、MATLABらしくは無いですけど2重ループで所望の範囲の値の個数と合計を求めればいいんじゃないでしょうか。
ここから先は自分で考えたほうがいいと思います。
基本的な内容ですので、これが出来ないとプログラムが絶望的だと思います。
ご回答いただき、ありがとうございます。
一気に外れ値をキャンセルするのは無理ですか・・・
仰る通り、プログラムは絶望的です(;_;)
単純なプログラムにも悪戦苦闘し、たくさん時間を使ったのに分からずじまい・・・
なんてことも多々あります。
環境上、独学で学んでいるのも原因ですが・・・
幸い(一般的には)難しい事はしないようなので、あと5ヶ月だけの我慢だとがんばります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- Excel(エクセル) エクセルのセルの書式設定・ユーザー定義の条件設定について 1 2022/08/17 21:56
- Java Java モンスターブリーダー 1 2023/02/05 09:44
- 統計学 統計検定2級の過去問について 1 2023/01/04 16:40
- 統計学 t値の計算方法 1 2022/11/29 18:37
- Excel(エクセル) Excelで縦1列に並んだ大量の数字から、一定間隔で平均値を出したい。 2 2023/02/20 09:17
- Excel(エクセル) Excelの関数についておしえてください。 3 2023/04/20 18:36
- 統計学 風速を1秒刻みで推定する方法 6 2023/03/03 11:58
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c言語
-
OPENCVを使ったエピポーラ幾何...
-
MATLABのデータ抽出についてお...
-
MATLABの参考書
-
C言語で行列表現
-
cのプログラミングで虚数を含...
-
C言語で余りがマイナスになる場合
-
H8マイコン C言語でのプロ...
-
特定のPCだけ動作しないVBAマク...
-
Excel・Word リサーチ機能を無...
-
メッセージボックスのOKボタ...
-
UserForm1.Showでエラーになり...
-
Excel マクロ VBA プロシー...
-
配列数式の解除
-
教えて下さい
-
エクセルで特定の列が0表示の場...
-
String""から型'Double'への変...
-
TERA TERMを隠す方法
-
文字列内で括弧を使うには
-
wordを起動した際に特定のペー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語
-
繰り返し1行~28行までを順順に...
-
H8マイコン C言語でのプロ...
-
!(否定)演算子について
-
C言語で余りがマイナスになる場合
-
MATLABにおける行の挿入方法
-
五目並べ
-
パイソンのプログラミングにつ...
-
if文について教えてください
-
フォートランで行列の計算
-
一般次元の逆行列を求めるプロ...
-
MATLABのデータ抽出についてお...
-
【MATLAB】配列内の数値のキャ...
-
OPENCVを使ったエピポーラ幾何...
-
StandardMLで整数リストの奇数...
-
cのプログラミングで虚数を含...
-
MATLABの参考書
-
C言語で行列表現
-
mathematicaの質問です
-
ダイナミックプログラミング
おすすめ情報