• 締切済み

Matlab,文字を含む数値データの読み込み

Matlabで,文字が含まれるデータから数値だけを読み込ませたいのですが,うまくいきません・・. データは,6行目まで文字が含まれており, その後100~120行ほど数値が存在します. 現在,dlmreadを用いて,その数値のみを抜きだそうと考えています. それぞれのデータ行数は分かっているため, 例えば最終行が109行目のものは dlmread ( filename , '\t' , 'A7..H109' ) という具合に書けるのですが, その行数がデータによって変化した場合, どのように読み込めばよいのでしょうか?

みんなの回答

  • kirinoma
  • ベストアンサー率53% (288/542)
回答No.1

test.txt ----------------- // comment1 honyarara // comment2 nantoka 12 58 32 15 68 56 13 75 98 ----------------- ・行数がデータによって変化する,というのの「行数」が,文字を含む行 を指している場合(6行だったのが5行になったりする): 文字列の頭が特定の文字形式(プログラムで言うコメント形式)に なっていれば,textscanを使用し,オプション'commentStyle'で, 特定文字列行をスキップすることで実現できます. c=textscan(fid,'%d','commentStyle','//'); ・行数がデータによって変化する,というのの「行数」が,数値行 を指している場合(109行が110行になったりする): 同様に,textscanを使用し,オプション'headerLines'で, 先頭の飛ばしたい文字列行数を指定することで実現できます. c=textscan(fid,'%d','headerLines',2); 両者とも,cは{[12;58;32;15;68;56;13;75;98];}というセル配列になります. まあ,実際は元のデータを作成するときに,最大の行数を決めてしまって, それ以下の行数になるときはダミーの文字やあり得ない数値(99999)を入れて おくなどの工夫をしておいた方が頭を使わなくてよいです^^;

関連するQ&A

  • MATLABのグラフ

    MATLAB という汎用数値解析プログラムを使っています。 現在、100×100の配列の中にランダムな数字(0~40)が入ったデータを扱っています。 その中にある数値を棒グラフで表現したいのですが、どうしたら良いでしょうか。 ヒストグラムの表現はできたのですが、私が行いたいのは1行目の1には数字A,1行目の2には数字B・・・と言ったようなグラフを作りたいです。 周囲にMATLABに詳しい人も居なく、独学では限界を感じて質問しました。 ご回答よろしくお願いいたします。

  • 数値データの抜出

    ss 6t×50h×1000L 6t×50h×1000L 上記のようなデータがあります。 tの前の6、hの前の50、Lの前の1000を取り出す関数をそれぞれご教授くださいませ。 パターンとしては・・ *t×*h×*L * *t×*h×*L ←最初にssなどの文字列がある時があります。ただし、抜き出すtの数値の前には半角スペースがあります。 お手数掛けますが、よろしくおねがいします。

  • あるセルの文字列(または数値)を、他のセルのデータの一部として流用した

    あるセルの文字列(または数値)を、他のセルのデータの一部として流用したい場合について。 例えば、 セルA1に 0001 セルA2に K-0001 セルA3に T-0001 セルA4に W-0001 また、 セルB1に 0035 セルB2に K-0035 セルB3に T-0035 セルB4に W-0035 …C、D、E、、、と100項目ほど続く、という場合。 このようにデータを入力していきたい場合、 例えば、A列で、 A1の0001という数字を、A2~A4の中で、「データの一部として代入」したい時、 どういう風に自動化できますでしょうか? (例)K-0001 の中において、0001という数字は、データの一部として使われている。 ちょっとまとめてみますと、 1行目:●●●● 2行目:K-●●●● 3行目:T-●●●● 4行目:W-●●●● ●●●● は、同列の1行目の数値を、そのまま割り当てる というような記述ができたらなと思っているわけです。 つまり、1行目に●●●●を打ち込むだけで、その列の2行目以降について、適宜、自動的に必要な数値なり文字列が入力されるようにしたいわけです。 このようなことは、できませんでしょうか? マクロでも何でも結構です。 どなたか、お詳しい方、教えて下さい。 必ずお返事致します。

  • MATLABのプログラムでのデータ処理で困っています。

    こんにちは、MATLAB初心者の者です。 あるデータの処理をしなくてはならないのですがどのようにプログラムを作ってよいか分からず困っています。 データの内容はこのような数字が並んでいます。 522344 527870010500115000980009800079000780008000101000 529970009800119001040008900083000910008800101000 523800003010700120001120010000090001010010700117 ・・・・・・ これを1行目の3~4桁、5~6桁を取り出し、2行目の3~5桁、6~8桁、9~11桁・・・と3桁づつを1行目から取り出した数字の後に取り出したいのです。 23 44 787 23 44 001 23 44 050 23 44 011 23 44 500 23 44 098 ・・・・・・ 3行目以降も同じ方法です。 23 44 997 23 44 000 23 44 980 23 44 011 23 44 900 ・・・・・・ 説明が下手ですみません。 他の言語で作成した方が早いとは思いますし、こんな簡単なことも出来ないのに使うなとお叱りを受けそうなのですがMATLABでやらなければならない事情があり、困ってしまいこちらに質問する事にしました。 どうかよろしくお願いします。

  • 特定の文字列を含む数値の分散計算

    Excelで特定の文字列を含む数値の分散を計算したいのです。 I2~I10にA・Bどちらかの文字が書いてあり、A2:H10には数値が書いてあります。 A~H列の数値について、Aを含むセルの分散とBを含むセルの分散を計算しなくてはなりません。 例えばA列の場合、A2~A10の中でI行にAが書いてあるもののみの分散・Bが書いてあるもののみの分散を計算するといった具合です。

  • MATLABのデータ抽出についておたずねしたいことがあります。

    MATLABのデータ抽出についておたずねしたいことがあります。 MATLAB初心者ですが、以下のようなプログラムを現在書いています。 f = input('file name? ---> ','s'); m = csvread(f,66,2,[66,2,1089,3]); time=(0:0.002:2.046); t=reshape(time,1024,1); current=m(:,1)*1000; voltage=m(:,2)*10; m2=[t current voltage]; a=m2(1,2); b=m2(2:40,2); if a>max(b); g=a; end for I=2:1024; for J=1:1024; for K=39+I; if K>1024; K=1024; end c=m2(I,2); d=m2(J:I-1,2); e=m2(I+1:K,2); if c>max(e)&&c>max(d); g=c; else end end end end plotyy(t,current,t,voltage) ylim([0,700]) ifの条件を満たしたときに、m2の2列目の値だけでなく条件を満たしたその行の3列全てのデータを抽出し、条件を満たした行だけの新たな行列を作りたいのですが、どのような命令を書けばよいでしょうか。 お手数をおかけしますが、ご教授よろしくお願いいたします。

  • 3個の山になっている連続数値データから各最大値を

    エクセルで3個の山になっている連続数値データがあります。 0.3 2.5 5.8 7.6 3.5 0.2 3.0 6.2 7.9 4.5 0.1 2.7 5.2 7.3 3.3 0.3 といった具合です。 このデータはたとえのデータで、実際の連続データの行数は3000行くらいです。 今は、まずこのデータのグラフを描いて、そのグラフの山をみてから、該当するおよその行を選択して、MAX関数で最大値を3つ別々に求めています。 この方法以外にそれぞれの3つの山の最大値を得る便利な方法がありましたら教えてください。 よろしくお願いします。

  • MATLABの疑問

    MATLAB初心者です。 今MATLABを使い勉強をしています。 先生からもらったデータでそこに数値を入れて行っているのですが 開始時間を変更するとなぜ、結果のグラフが違うんでしょうか。 例えば、0開始と0.01開始のグラフがすごい違います。 (終了時間は同じ) 例だと、0.01秒信号が出る時間が遅くなっただけで 何も結果には変化ないと思うのですが そこのところどうなのでしょうか・・・ 皆さん回答お願いします。

  • 文字と数値範囲が混ざっているデータの分類分け

    エクセル2002を使用しています。 基礎となるデータには、各人の分類もしくは数値データが入っています。 それを、別のセルにランクのように分類させたいのです。 例えば、そのデータはC列に300行ほど入っているとします。 データは、文字として、 A世帯 B世帯 C世帯 その他に数値として 0 から 9999999 まで、ランダムに入っています。 D列に、 A世帯          なら 1 B世帯          なら 2 C世帯          なら 3 0から71999        なら 4 72000から179999     なら 5 180000から458999     なら 6 459000から9999999    なら 7 と、したいのです。 数値だけなら、 =IF(C1<72000,4,IF(C1<180000,5,IF(C1<4590000,6,IF(C1<9999999,7,"")))) でよろしいかと思います。(違うでしょうか) 文字が入ると、どのようにすべきか教えてください。 よろしくお願いします。

  • MATLABでのFFTについて

    MATLAB という汎用数値解析プログラムを使って、人でとった心電図のRR間隔の周波数解析を試みております。R波の検出し、512ポイントのRR間隔(RRI)のデータを得ました{R波をとるときの時間をtとし、RRI(n) = t(n+1)-t(n)}。ここからデータを補完してリサンプリングし、データポイントを2のべき乗にそろえ、FFTに持っていきたいと思います。 そこで質問は、#1.RRIを得る時点で、512ポイントにする意味はありますか? #2.最終的にFFTに行く前に2のべき乗のポイント数になれば問題ないでしょうか?

専門家に質問してみよう