プロが教える店舗&オフィスのセキュリティ対策術

Matlab初心者です、よろしくお願いします。

Matlabであるmatファイルを1000個作りました。それぞれのファイル名は1~1000.matのような感じです。
中身はすべて7*250の配列で、それぞれ異なる値が入っています。
これまではfor文を使ってiをstring型にしてからloadで読み込んで、値を用いて計算するのを繰り返していました。

しかしこのままカレントディレクトリに1000個もmatファイル置いておくと、とても作業がしづらく邪魔です。

例えばこれを1つにまとめて使う方法や、うまいload方法、違うディレクトリを作成して、load時のみそのディレクトリを参照する方法などありましたら、ご教授していただけると助かります。

よろしくお願いします。

A 回答 (2件)

load foo/10.dat


とか書けば,subdirectory foo を見に行くし.
load ../foo/10.dat
とかかけば,1こ上のディレクトリの下の foo ディレクトリのデータを読むし,

ウィンドウズなら,
load d:/Temp/10.dat
で d ドライブ Temp ディレクトリの 10.dat を load します.
    • good
    • 0

load自体は別のディレクトリからでも読み出せます。


load('ディレクトリ名\ファイル名.mat')
みたいにすればよいかと。

MatlabにString型ってありましたっけ?文字はchar型だったような…ってどっちでもいいですね。

まあプログラムの最初にaddpathでmatファイルを置いているディレクトリにパスを通しておいて、終わりにrmpathすれば途中の読み込み時にはディレクトリの指定なくloadできますけど、わざわざそんなことする必要もないでしょう。

>これまではfor文を使ってiをstring型にしてからloadで読み込んで
ループ変数にiを使われているということはC経験者でしょうか?
(私はプログラムのとっかかりがMatlabで、Matlabではiは虚数単位ですからループ変数にkを使うクセがあるのです)
Cをお使いでしたらsprintfはご存じですよね?
loadのfilenameにsprintfの出力が使えますので、
例えば
dir='ディレクトリ名';
としておいて、
load(sprintf('%s\\%d.mat',dir,i))
とすれば読み込めます。
この方法だと、例えば
1.mat、2.mat、…としているとファイル名でソートした時ファイルの順番がばらばらになってしまいますが、
sprintfが使えるのであればファイル名をあらかじめ0001.mat、0002.mat、…みたいにして
load(sprintf('%s\\%04d.mat',dir,i))
としてやることもできますね。

参考になれば幸いです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!