• 締切済み

matlabで、平均値を求める方法を教えて下さい。

matlabで、複数のファイルにある数値の平均値を求める方法を教えてください。 sample1.nc, sample4.nc, sample7.nc の3つのファイルがあり、 それぞれに3つのデータが含まれています。 sample1.ncには data1,data2,data3 sample4.ncには data4,data5,data6 sample7.ncには data7,data8,data9 以上の計9個のdataがあります。 ここで例えばdataにはある人の身長が書かれているとします。 data1=147cm,data2=150cm,data3=140cm,・・・ など。 この場合に、data1からdata9の9個の数値(身長)の平均値を matlabを用いて求めるプログラムを教えてください。

みんなの回答

  • Kules
  • ベストアンサー率47% (292/619)
回答No.2

そうですね…各ファイルに入っているデータは3つで固定なんですかね? forループで回したいってことなんで、ループで回しましょうか。 for k=1:3:○○; fid=fopen(['sample' num2str(k) '.nc']); … end 文字列に数値(例えばループ変数)を入れたい時はnum2strを使うのが一番簡単でしょうか。 Cを使った経験があるのならsprintfの方がしっくりくるかもしれませんね。 詳しい使い方はhelpなど見ていただければいいかと思います。 他の部分は先の回答者さんの書いたもので事足りると思うので省略します。 参考になれば幸いです。

回答No.1

ファイルにはどっちが書かれてるのかな? (1) 147cm,150cm,140cm (2) 147,150,140 (2)ならベタで書くと↓ fid1 = fopen('sample1.nc,', 'rt'); d1 = fscanf(fid1, '%d,%d,%d', [3 inf]); fclose(fid1); fid4 = fopen('sample4.nc,', 'rt'); d4 = fscanf(fid4, '%d,%d,%d', [3 inf]); fclose(fid4); fid7 = fopen('sample7.nc,', 'rt'); d7 = fscanf(fid7, '%d,%d,%d', [3 inf]); fclose(fid7); mean([d1 d4 d7]) helpやlookforコマンドで調べれば直ぐ解る質問ですが・・・・。

kotben
質問者

補足

回答ありがとうございます。 ファイルには147,150,140 といった形でかかれているのですが、 実際には.ncファイルが100個以上ありますので、 回答してくださったようにひとつずつファイルを開いて、 mean([d1 d4 d7])というようなプログラムは書くのは難しいです。 自分は、forを使ってループさせる必要があるのかのと思っているの ですが、どうでしょうか? 情報不足で申し訳ございませんでした。

関連するQ&A

  • MATLABによるアニメーション

    現在、数値流体解析を行っており、その結果を3次元のアニメーションをしたいと考えています。アニメーションさせる方法としてMATLABを考えいるのですがなかなか思うように行きません。そこで、以下の質問があります。 (1):アニメーションの為の3次元のデータファイルはどのような配列で   ファイルに格納しなければならないのか。 (2):データファイルには、ある時間ステップごとのデータがあるのですが   このデータをどのようにMATLABに読み込ませれば良いのか((1)にも関係が  あるかも) (3):アニメーションの為の必要な関数、定義は何か 以上の3つなのですが、もしMATLABによるアニメーションの良い例などがどこかのホームページなどにあれば教えていただけるとありがたいです。 分かりにくい文章で申し訳ありませんがよろしくお願いします。

  • 平均値の求め方を教えて下さい

    小6算数(平均値)の宿題が、わからず (お恥ずかしいのですが、私にも全くわかりません) どなたか、教えて戴けないでしょうか・・ 何卒、宜しくお願い申し上げます。 問題) 4人の身長の平均値は、147.3cmです。 もう一人入れると、身長の平均は 146.2cmになります。 この人の身長は何cmでしょうか。 すみません、どのような計算方法で、算出できるのでしょうか

  • 【MATLAB】配列内の数値のキャンセル方法

    MATLAB という汎用数値解析プログラムを使っています。 現在、100×100の配列の中にランダムな数字(0~40)が入ったデータを扱っています。 しかし、中にはマイナスの値や100を超える値も時々入ってしまっています。 できれば0~40の間の値の中で平均値や最大・最小値を算出したいと考えています。 この外れ値を計算せず(もしマイナスや40以上ならその値は無かったことにして)平均値等を出すことは可能でしょうか? if文なども考えたのですが、いまいち書き方が分からず困っています。 どうかご回答よろしくお願いいたします。

  • MATLAB

    MATLABについて シュミレーションのプログラムを作成したのですが、保存した名前がいけないのか、 MATLABで開けないFileになってしまいました。 WORDPATで開いても文字化けして読めません。 何か良い方法はないでしょうか・・・ どうしても中身を復活させたいのです。 どなたか解決方法を知っていたら教えてください。

  • matlabでの値をエクセルで扱う方法

    matlabのsimulinkを用いてシミュレーションを行い、 scopeで波形を読み取りました。 そのときの波形のデータを数値として出し、エクセルでグラフに処理したいのですがmatlabデータとエクセルとを互換する方法が分かりません。 教えてください よろしくお願いします。

  • matlabデータをバイナリデータで書き出す方法

    matlabデータをバイナリデータで書き出す方法を教えてください。 matlabで心電図波形を記録したのですが、RR間隔を出すプログラムを組むことが出来ませんでした。 そこで、先生が作られたRR間隔を出すプログラムがLabVIEWにあるので、matlabデータをLabVIEWにくわせてRR間隔を出したいと考えています。 LabVIEWにくわすには、matlabデータをヘッダ1024バイト、データは4バイトの単精度浮動小数点にしなければいけません。 matlabで任意のヘッダを付けたバイナリデータを生成する方法を教えてください。

  • MATLABについてです

    画像処理に使うMATLABについてです。 MATLABでimagescを使って、データを画像化しました。 画像化してカラーバーを表示させました。 ここからが質問です。カラーバーの値は普通にしてたらそのデータのままの値(自分の場合、光の強度)ですが、これをログにしたいです。 カラーバーの数値をログにするにはどうしたらいいのでしょうか? 簡単にできるのか、また、imagesc以外に別の何かを使うのか。 参考書を見ても、カラーバーの数値をログにするやり方はないので、詳しい方教えて下さい。 お願いします。

  • 移動平均とローパスフィルタについて(matlab)

    入力信号10Hz(サンプリング周波数1000Hz)に対して、 1周期分(100点)のデータを取り出して平均値を算出し、1サンプル移動して同様に100点のデータの平均値を算出する、というような移動平均のプログラムを書きました(下に載せました)。 この移動平均プログラムと同様の結果が得られるようなローパスフィルタを設計したいのですが、方法がよくわかりません。 ご存じの方、教えて頂けると幸いです。 宜しくお願いします。 以下、移動平均プログラムになります。 clear all fs = 1000; % サンプリング周波数 t = 1/fs:1/fs:3; f = 10; % 入力信号の周波数 y = sin(2*pi*f*t); % 入力信号の生成 M = round(fs/f); % 一周期分のサンプル数(10Hzの場合、100点) for i = 1:1:length(y)-M+1 y2(i) = mean(y(i:1:i-1+M)); % 移動平均 end plot(t(M:end),y2);

  • リアルタイムでの平均のとり方

    例えば、1 3 4 5 6 7 4 2 1 と順次入ってくるインプットに対して、 3つずつの平均を計算していくプログラムはどのように組むとよいでしょうか? この場合、1の平均、1 3の平均、1 3 4の平均、3 4 5の平均となります。 Matlabでプログラムを作成しますが、考え方だけでも教えて頂けますと幸いです。

  • matlabについての質問です。

    matlabについての質問です。matlab初心者です。 3つ以上のデータ列について相関係数を求めるプログラムを教えてください。 イメージとしては データ列a b cについて a b c a 1 b 0.2 1 c 0.8 0.4 1 このような結果が出るようなプログラムを書きたいです。 わかるかた、回答宜しくお願いします。