MATLABで行列を配列に格納する方法

このQ&Aのポイント
  • MATLABで行列を配列に格納する方法について質問です。
  • 具体的には、指定のファイルを行列として読み込んで、配列に格納する方法が知りたいです。
  • 初心者ですので、基礎的な方法を教えていただけると助かります。
回答を見る
  • ベストアンサー

MATLABで行列を配列に格納する方法

MATLAB初心者で大変申し訳ありませんが、行列の格納の仕方がわからないので、投稿させていただきました。 for k = 1:1:10 k=k; t(:,:)=load(sprintf('test%5.5i.txt',k)); end 具体的に言いますと、上記のプログラムで、test00001~test00010.txtというファイルを任意の行列t(:,:)で読み込んでいるのですが、このt(:,:)をkと対応させて、例えばk=1の場合のtをt[1]、k=2の場合のtをt[2]などの配列に格納し、それを自由に呼び出し、計算を行いたいと考えております。 基礎がわかっていないためにどうしていいかわかりません。 宜しく御願いします。

  • ys09
  • お礼率50% (1/2)

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

  • ベストアンサー
  • sgwjn
  • ベストアンサー率70% (47/67)
回答No.1

構造体を使うのが一番スマートでしょうか。 for k = 1:10  FILE_DATA(k).t(:, :) = load(sprintf('test%5.5i.txt', k)); end これで、FILE_DATA(1)~FILE_DATA(10)それぞれに行列tが格納されます。

ys09
質問者

補足

ご回答ありがとうございます。非常にわかりやすく、行列を格納することができました。追加でもう一つ教えていただきたいのですが、格納した行列に対して、同じ次元の行列と四則演算を行う場合、3列目のみを引き算する、2行目と5行目のみを足す、などの方法はあるのでしょうか? 素人でほんとに申し訳ありませんが宜しく御願いします。

その他の回答 (1)

  • sgwjn
  • ベストアンサー率70% (47/67)
回答No.2

同サイズの行列A、Bがある場合 > 3列目のみを引き算する ans = A(:, 3) - B(:, 3); > 2行目と5行目のみを足す ans = A([2 5], :) + B([2 5], :); このような方法で可能です。

ys09
質問者

お礼

本当にありがとうございました。 非常に分かりやすかったです。

関連するQ&A

  • MATLAB 256列以上の配列格納について

    こんにちわ。 現在、matlabで行971、列971程度の配列を用いて画像化したいと考えています。 しかし、列が256を超えるとエラーが出てしまい、処理できません。 ソースは下記の通りです。 971×971の正方形の画面にするので、1列(971×971)行などのように分割に全部入れて処理もするわけには行かないと思います。 よってなんとか256以上の列を使っていかなければならないです。 どうか、わかる方がいればお願いいたします。 //////////////////////////////////////////////////////////////// clear all; j=971; jj=5; test=[1:j,1:j]; for k=0:jj test=load(sprintf('APW%04d.csv',k)');%kの値を%04dに上書き end for i=1:j test(:,i) = abs(test(:,i)/j);%データを0~1に補正 end /////////////////////////////////////////////////////////////// エラー内容は下記の通りです。 //////////////////////////////////////////////////////////////// ??? Attempted to access test(:,257); index out of bounds because size(test)=[971,256]. エラー ==> Copy_of_Gzousyori at 14 test(:,i) = abs(test(:,i)/j);データを0~1に補正 ////////////////////////////////////////////////////////////////

  • matlabにおける行列の格納

    matlabにおける質問です。 (matlabもとよりプラグラミング初心者です。) 例えばx=[1 2 3;3 4 5]となっているとき for i=1:10 y(1)=i*x end のように、しても、y(1)とxの次元が合わないというエラーが 出ると思います 行列を、このように「i番目」といった添え字のついた変数に 代入するには、どうしたらよいのでしょうか。 初心者のため大変初歩的なことですが、どなたかご教授ください。 とても焦っております。。。

  • matlabによるNULL文字を知りたいのですがお願いします。

    現在、matlabにより、複数のcsvファイルをループして画像化にしています。 複数あるcsvファイルをループで読み込みする時、被験者ごとにcsvファイルの数が違います。 よって始めの宣言で大量のcsvファイルの個数を宣言して、ループします。 csvがNULLになるときに処理が中止するようにしたいと思います。 (これにより一回一回、csvの数を宣言しなくて済みます。) この時のNULLに当たるものが見つからなくて困っています。 //////////////////////////////////////////////////////// clear all; j=1000;%配列の行列数 jj=10; %csvの数 実際の数はもっと少ない test=[]; A=[0,0]; %空行列 ここの空行列AではNULLにはできない for k=1:jj test=load(sprintf('test%02d.csv',k)');%kの値を%02dに上書き if test== %NULL or A or EOF or '' ? break; %NULLになったら次のfor文へと進む else ・・・・ //////////////////////////////////////////////////////// 上のソースの最後から3番目の if test== の後にNULLになるのを入れたいと考えています。 どなたか知っている方、どうかよろしくお願いします。

  • MATLABで配列をファイルへ書き込む方法

    現在MATLABについて勉強しているのですが、配列M(N×N、Nは任意)をファイル(.txtなど)に書き込む方法が分からず困っています。 fid=fopen('matrix.txt','wt'); fprintf(fid,'%6.4f',M); fclose(fid); このように書いているのですが、全要素が1行に並んでしまいます。 N行N列の形で配列をファイルに出力したいのです。 どなたか初心者でも理解できるようご教授お願い致します。

  • MATLAB 行列の抽出

    私はMATLAB初心者なのですが,行列の抽出ができなくて困っております. やりたいこととしては,for文を用いて行列x_r(41×3行列)がode45によって次々と求められるので,そのつどそのつど(i=1のときから1=10のときまで)でx_r(1)の値を新しい行列pに保存していきたいのですが上手くいきません.わかる方がいらっしゃいましたらご教授お願いします. for i=1:10 [t,x_r]=ode45('...',[0.01],x_r); ..... p(:,i)=x_r(:,1); …(1) ..... end 上の(1)のように行列pにi=1~10までのときのそれぞれのx(i)(41×1行列)の値を保存しようとしましたがうまくいきません. p=(x(1)_i=1,x(1)_i=2,x(1)_i=3,・・・・,x(1)_i=10) (41×10行列)(やりたいことのイメージ) エラーメッセージは「添字による代入の次元が一致しません。」と出ています.

  • MATLABのシンボリックの係数行列の順序について

    現在MATLABについて勉強しているのですが、y=3*x^2+4*x+2のような任意の1変数多項式において、 最高次の係数で規格化(y=3/3x^2+4/3*x+2/3)したく、cf=coeffs(y)で係数の行列([2 4 3])を返し、 最高次の係数の要素(cf(end))で、多項式を割った式(y/cf(end))を求めたのですが、 上記のように係数の行列要素が次数の低い順にいつでもなっていると最高次の係数の要素はcf(end)で良いのですが、 与える多項式によって、係数行列要素の順序が変わってしまいます([2 3 4]、[3 4 2]のように)。 任意の1次多項式において規格化できるようにしたいのです。 どなたか初心者でも理解できるようご教授お願い致します。

  • コマンドの結果をシェルの配列に格納する方法

    cat test.txtのような、コマンドの結果が次のようなとき、うまくこれらをシェルの配列に格納する方法はありますか? ('3','9','11') ちなみに、'3'のような形ではなく、単純に3と格納されるようにしたいです。 できたらsedなど、正規表現を使わない方法を教えて頂きたいです。 宜しくお願い致します。

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

  • 2次元配列への格納方法について

    こんにちは。 FILE *fp; SIZE 1024; int n; char Buf[1025]; while((n = fread(Buf,1,SIZE,fp)) != 0){ } というように、fread関数を用いて1024バイトずつ配列Bufへ格納しています。 以下に示すようなことを行う場合、どのように記述すればよいのでしょうか? B:バイナリデータ T:数値 TBBBBBBBBB・・・・・・B←1024バイト目 TBBBBBBBBB・・・・・・B ・ ・ ・ ・ TBBBBBBBBB・・・・・・B というように、配列内に格納したいと思っています。 Tは、テキストデータで1,2,3・・・・100という整数型を格納。Bは、バイナリデータでfread関数から取得したバイナリデータを格納します。 なぜ、Tを格納したいかといいますと、どのバイナリデータを指しているか?を判別するためです。 上記のようなことを行うためには、2次元配列を使用すればよいのでしょうか? 例:char Buffer[100][1025]

  • MATLABでの行列の全要素の和

    MATLABでの行列の全要素の和を計算するのに下の例のようにfor文を使うのとsum関数を使うのとで結果が違います。何故ですか? 計算結果の差をとってみると極々微小な差が生じてしまいます(e-10位)。 シミュレーションの中でこのような処理を行っているのでより正確な方が知りたいです。 例 A=rand(10); plus=0; sum=0; for i=1:10  for j=1:10   plus=plus+A(i,j);  end end sum=sum(A(:));

専門家に質問してみよう