• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MATLABでのデータ処理に関して)

MATLABでのデータ処理に関する疑問:データ整理方法とは?

このQ&Aのポイント
  • MATLABでのデータ処理について疑問があります。テストデータを取り込んでデータ整理をしたいのですが、不要な行を削除する方法を教えてください。
  • テストデータの取り込み・データ整理について、MATLABでの方法について教えてください。特に、不要な行を削除する方法についてお聞きしたいです。
  • MATLABを使用してテストデータの取り込みとデータ整理を行いたいのですが、不要な行の削除方法がわかりません。どのようにすれば不要な行を削除できるでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

#2です。 とりあえず2案ほど・・・・相変わらず確認はしてません。 matlabはfor文つかったら負けなので案1の方がお勧めです。 %案1 filename='a.txt'; num_cols = 12; [fid,message]=fopen(filename,'rt'); if fid ==-1 error(message); end text=textscan(fid,repmat('%s',1,num_cols)); fclose(fid); text_=cat(2,text{:}); text_(strcmp(text{1},'060B'),:)=[]: %文字列配列として使う cell2mat(text_(1:end,1)) %数値として扱う hex2dec(cell2mat(text_(1:end,1))) %案2 filename='a.txt'; num_cols = 12; [fid,message]=fopen(filename,'rt'); if fid ==-1 error(message); end text=textscan(fid,repmat('%s',1,num_cols)); fclose(fid); cmp=strcmp(text{1},'060B'); for I=1:num_cols; text{I}(cmp)=[]: end %文字列配列として使う cell2mat(text(1)) %数値として扱う hex2dec(cell2mat(text(1)))

lzono_afayette
質問者

お礼

ご指導ありがとうございました. 案1をベースにさせていただきました.

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.3

#2です。 cmpDATA(:)='060B'; は間違いですね。こうかな? cmpDATA(:)={'060B'}; 相変わらず未確認なので、動くかはわかりません。

lzono_afayette
質問者

補足

取り込む型を間違っていました。 [text] = textread(filename, '%s', -1); で取り込んだ後、n行1列の配列12個に振り分けています。 現在のプログラムは下記なのですがこのやり方だと'060B'の行を削除するのは難しいでしょうか? たびたびお手数をおかけしますがアドバイスよろしくお願いします。 [text] = textread(filename, '%s', -1); num_cols = 12; lines = round(length(text)/num_cols); data1 = zeros(lines,1); ... data12 = zeros(lines,1); for i = 1:lines data1 = char(text(num_cols*(i-1)+1));    ... data12= char(text(num_cols*(i-1)+12)); end

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

matlabでどのような型で取り込んでいるんでしょう? n行12列のセル配列ですか? セル配列だとして、これをDATAとすると、こんな感じかな? lines= size(DATA,1); cmpDATA = cell(lines,1); cmpDATA(:)='060B'; DATA(strcmp(DATA(1:end,1),cmpDATA),:)=[]; 手元にmatlab無いんで未確認です。

lzono_afayette
質問者

補足

早速のご回答ありがとうございます. 各列個別に取り込みたいので,取りこむ型はn行1列の配列12個です. 出先のためMatlabですぐに確認はできませんが,戻り次第,トライしたいと思います.

全文を見る
すると、全ての回答が全文表示されます。
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

grep や findstr などのコマンドで除外してみては。

lzono_afayette
質問者

補足

ご回答ありがとうございます. なるほど. コマンドラインで出来てしまうのですね. 今回のデータ処理は,PCの操作に慣れていない人間でも出来るようにしておかないと駄目なため 出来ればMatlabでやりたいと思っています. (グラフを描く作業をMatlabでやるようにM-Fileを使っています)

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • データ移動処理

    0 0 1 0 0 1・・・ a b c d e f ・・・ a b c d e f ・・・ a b c d e f ・・・ 上図で一番上の行にある数字が1の場合だけの列を選択し、1の列全てをコピーをして 別シートへ移動して今度は、行で挿入をして貼り付けを行いたいと考えております。 しかし、データ量がものすごく多いので1だけがいくつあるのかさえわからないため 挿入先にも一体いくつ挿入すればいいかわかりません。 データ量(行が1の数)にあわせて挿入数をいれ、また列のデータから行のデータへの変換はどうすればいいかお力を貸していただけないでしょうか? 今回の質問はEXCELについてです。 そしてできればVBAのほうで処理を行いたいと思っております。 (原本のデータ編集が何度もされるのでVBAで登録しておこうかと^^;) よろしくお願いいたします。

  • 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列全てのデータを抽出し、条件を満たした行だけの新たな行列を作りたいのですが、どのような命令を書けばよいでしょうか。 お手数をおかけしますが、ご教授よろしくお願いいたします。

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

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

  • MATLABではどうすればいいのでしょうか?

    MATLABで、 M = 10 C = 1 K = 10 T =0.01 A = [0 1;-K/M -C/M] B = [0;1/M] I = [1 0;0 1] という条件で、 E1 = I + Σ(1/N!)*(A*T)^(N-1)  (ΣはN=2から) F1 = I+(A*T)*E1 G1 = E1*T*B の計算を、 例えば、5項目までと6項目までの計算をして、 その差をとり、差が条件以下(例えば10^-5以下)なら終了、 それ以上なら、続けて、次に6項目と7項目までを計算して、 その差をとるといったような、プログラムを作るにはどうすればよろしいのでしょうか?

  • Excelで、行の組み換えについて

    A列からG列までデータが入っているリストがあるのですが、 例えば、1行目から50行目までと、51行目から100行目までを交互に組み入れるには どのようにすればよいでしょうか。   A B C D E F G 1 2 3 ・ ・ ・ 51 52 53 ・ ・ ・ といったものを、   A B C D E F G 1 51 2 52 3 53 ・ ・ ・ のようにしたいのですが、一気に操作できる方法があれば 教えていただきたく、よろしくお願いいたします。

  • MATLABのfor文の使い方について

    MATLAB(というかプログラム)初心者です 下記を教えてください よろしくお願いいたします 「つくりたいプログラム」 y1=[A B C] y2=[D E F] ・ ・ ・ y200=[AA BB CC] 上記のような200個くらいある行列に同じ操作をしたいです そこでいちばん簡単な構造を考えました ////////////////////// y1=[A B C] y2=[D E F] for i=1:2 Yi=yi*5 end ///////////// 成功イメージは Y1=[5A 5B 5C] Y2=[5D 5E 5F] となってほしいのですが回りません・・・ yiの定義のしかたがわからず困っております 初歩的な質問かもしれませんが教えてくださいよろしくお願いいたします

  • テキストファイルのデータをエクセルへコピーのやり方

    よろしくお願いします。 エクセル2000を使っています。 テキストのデータで A1/B1/C1    /はスペースです。 D1/E1/F1    データの長さは全部違います。 A2/B2/C2     D2/E2/F2 A3/B3/C3     D3/E3/F3      ・    ・(続く) といったものがあります。これをエクセルで    A列 B列 C列 D列 E列 1行 A1 B1 C1 D1 E1 2行 A2 B2 C2 D2 E2  ・・・ 3行 A3 B3 C3 D3 E3  (続く)          ・          ・(続く) という感じで別々のセルにいれて貼り付けしたいのです。 テキストデータを別々のセルに貼り付けする方法は 過去ログで「区切り位置」というのをつかえばいいというのはわかりましたが、この場合の複数行にわたるテキストデータをエクセルの1行に貼り付けする方法がわかりません。また、データの長さが違うために「区切り位置」もうまくいきません。 良い解決法をお願いします。

  • VBAでのデータ転記処理

    下記の処理をVBAで作成したいのですが…。 Book "aaa" の "Sheet1" A |B |C |D |E |F |G |H |I |J |K 1 あ|い|う|え|お|か|き|く|け|こ|さ 2 た|ち|つ|て|と|な|に|ぬ|ね|の|は|ひ|ふ|へ 3 ま|み|む|め|も|や|ゆ|よ これをBook "bbb" の "Sheet1" に A|B|C|D|E 1 あ|い|う|え|お 2 か|き|く 3 け|こ|さ 4 5 た|ち|つ|て|と 6 な|に|ぬ 7 ね|の|は 8 ひ|ふ|へ 9 10 ま|み|む|め|も 11 や|ゆ|よ と言う風にデータを転記したいのです。 Book "aaa" の Sheet "Sheet1"のA~E列までは必ずデータが入っていますが F列以降は、データがある場合と無い場合があり データがなければ、そこのセル(行)は詰める。 さらに、Book "aaa" の1行を1セットとして、Book "bbb" で1セット単位で、空白行を設けたいのです。 上記例のように、1セットの行数は固定ではありません。 Book "aaa" の Sheet "Sheet1"のデータ行数は大量に(1000行以上)あります。 わかりにくいと思いますが、どなたかよろしく御願いします。

  • MATLABのグラフ

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

  • Matlabのspdiags関数

    Matlabのspdiags関数に関してわからないところがあります。以下はMatlabのヘルプWebページから持ってきた例です。http://dl.cybernet.co.jp/matlab/support/manual/r2006/toolbox/matlab/math/?/matlab/support/manual/r2006/toolbox/matlab/math/sparse4.shtml B = [ 41 11 0 52 22 0 63 33 13 74 44 24 ]; d = [-3 0 2];、m=7, n=4のとき A = spdiags(B,d,7,4) A = (1,1) 11 (4,1) 41 (2,2) 22 (5,2) 52 (1,3) 13 (3,3) 33 (6,3) 63 (2,4) 24 (4,4) 44 (7,4) 74 これに対応するフル行列Aは、つぎのようになります。 full(A) ans = 11 0 13 0 0 22 0 24 0 0 33 0 41 0 0 44 0 52 0 0 0 0 63 0 0 0 0 74 mやnというのはfull(A)がm行n列の行列であるというイメージの対応がわかるのですが、d = [-3 0 2]とfull(A)の行列の関係がわかりません。-3,0,2というのはfull(A)のどこを見れば良いのでしょうか。