- 締切済み
Matlab,文字を含む数値データの読み込み
Matlabで,文字が含まれるデータから数値だけを読み込ませたいのですが,うまくいきません・・. データは,6行目まで文字が含まれており, その後100~120行ほど数値が存在します. 現在,dlmreadを用いて,その数値のみを抜きだそうと考えています. それぞれのデータ行数は分かっているため, 例えば最終行が109行目のものは dlmread ( filename , '\t' , 'A7..H109' ) という具合に書けるのですが, その行数がデータによって変化した場合, どのように読み込めばよいのでしょうか?
- kajidesuyo
- お礼率0% (0/1)
- その他(プログラミング・開発)
- 回答数1
- ありがとう数4
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- kirinoma
- ベストアンサー率53% (288/542)
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に詳しい人も居なく、独学では限界を感じて質問しました。 ご回答よろしくお願いいたします。
- ベストアンサー
- その他(プログラミング・開発)
- あるセルの文字列(または数値)を、他のセルのデータの一部として流用した
あるセルの文字列(または数値)を、他のセルのデータの一部として流用したい場合について。 例えば、 セル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行目以降について、適宜、自動的に必要な数値なり文字列が入力されるようにしたいわけです。 このようなことは、できませんでしょうか? マクロでも何でも結構です。 どなたか、お詳しい方、教えて下さい。 必ずお返事致します。
- ベストアンサー
- Visual Basic
- 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つの山の最大値を得る便利な方法がありましたら教えてください。 よろしくお願いします。
- 締切済み
- オフィス系ソフト
- 文字と数値範囲が混ざっているデータの分類分け
エクセル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のべき乗のポイント数になれば問題ないでしょうか?
- 締切済み
- その他(プログラミング・開発)