【最大10000ポイント】当たる!!質問投稿キャンペーン!

はじめして。
MATLABの記述方法についての質問です。
Filename = strcat(set_Dialog(1,1),'.csv');
として、Filenameをダイアログから入力できるようにできるようにしました。
ところが、csvread('ファイル名')の引数を文字列として認識させる方法が分かりません。
ご存知の方がいらっしゃいましたら、教えて下さい。
よろしく御願いいたします。

A 回答 (1件)

意味が良く分かりません。


認識させるとは、csvread関数に認識させると言うことですか?
csvread関数の引数は、文字列で問題ないと思うんですが。

可能なら部分的にでもコードを公開した方が良いですよ。
言葉だけでは説明しにくいですし、質問者が不要と思っている中に重要な情報がある場合もありますから。
また、『どうすればできますか?』だけではなく『どういう風に上手くいかないか』を詳しく書いて欲しいです。
    • good
    • 0
この回答へのお礼

説明が下手で申し訳ありません。
再度質問させていただきます。
ご指摘ありがとうございました。

お礼日時:2008/03/10 21:46

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

このQ&Aと関連する良く見られている質問

QMATLAB(マトラボ)とcsvファイルについて

マトラボで、文字列を含む、csvファイルを読み込み、データをプログラムに使用したいのですが、どうしたらいいですか?
csvread('filename')ではできませんでした。
どなたか、ご教授くださいませ。

Aベストアンサー

Excelで読み込んで、xlsファイルにセーブして、
xlsreadでmatlabに読み込むとか。
http://dl.cybernet.co.jp/matlab/support/manual/r13/toolbox/matlab/ref/?/matlab/support/manual/r13/toolbox/matlab/ref/xlsread.shtml

QMATLABのCSV形式での書き込みについて

MATLABにて計算させた結果をCSV形式で出力したいのですが,
もともとCSVファイルに書き込んであるデータを消さずに,
追加書き込みとして,行と列を指定して書き込み出来るのでしょうか?

もしできるのであれば,
どのようなプログラムを組めばよいのでしょうか?
どなたかご教授お願いします.

Aベストアンサー

speedとpowerはdouble型の行列ですよね?

fwrite関数はバイナリ保存関数ですので、CSV形式(=テキスト形式)での保存はできません。
dlmwrite関数では小数点以下12桁までを指定して保存していますので、fprintf関数を使用すれば良いのではないかと思います。
なお、fprintf関数を使用する場合は、区切文字(,)や改行は自動で追加されませんので、以下のように記述する必要があります。

fprintf(fid, '%.12f,', speed);
fprintf(fid, '\n');
fprintf(fid, '%.12f,', power);
fprintf(fid, '\n');

ただ、この方法では各行の末尾にもカンマが出力されますので、それを抑止したい場合は、speedとpowerの各要素をループの中で保存してください。

■ fprintf関数
http://infoshako.sk.tsukuba.ac.jp/InfoRes/jdoc/MATLAB5/jhelp/techdoc/ref/fprintf.html


また、プログラムではfor文の中でfopenとfcloseを繰り返していますが、余り良いことではありません。見たところファイル名は一定のようですので、fopenとfcloseはfor文の外でするべきだと思います。そうすれば処理速度も向上しますし、別に追記でfopenする必要もありません。

fid = fopen('file1.csv', 'w');
for
fprintf(fid, ....);
end
fclose(fid);


最後に、この場合はファイルの出力方法を変更する以外に、speedとpowerをループ回数分保存するように変更する方法もあるのではないかと思います。

speedとpowerはdouble型の行列ですよね?

fwrite関数はバイナリ保存関数ですので、CSV形式(=テキスト形式)での保存はできません。
dlmwrite関数では小数点以下12桁までを指定して保存していますので、fprintf関数を使用すれば良いのではないかと思います。
なお、fprintf関数を使用する場合は、区切文字(,)や改行は自動で追加されませんので、以下のように記述する必要があります。

fprintf(fid, '%.12f,', speed);
fprintf(fid, '\n');
fprintf(fid, '%.12f,', power);
fprintf(fid, '\n');

た...続きを読む

Qエクセルで計算すると2.43E-19などと表示される。Eとは何ですか?

よろしくお願いします。
エクセルの回帰分析をすると有意水準で2.43E-19などと表示されますが
Eとは何でしょうか?

また、回帰分析の数字の意味が良く分からないのですが、
皆さんは独学されましたか?それとも講座などをうけたのでしょうか?

回帰分析でR2(決定係数)しかみていないのですが
どうすれば回帰分析が分かるようになるのでしょうか?
本を読んだのですがいまいち難しくて分かりません。
教えてください。
よろしくお願いします。

Aベストアンサー

★回答
・最初に『回帰分析』をここで説明するのは少し大変なので『E』のみ説明します。
・回答者 No.1 ~ No.3 さんと同じく『指数表記』の『Exponent』ですよ。
・『指数』って分かりますか?
・10→1.0E+1(1.0×10の1乗)→×10倍
・100→1.0E+2(1.0×10の2乗)→×100倍
・1000→1.0E+3(1.0×10の3乗)→×1000倍
・0.1→1.0E-1(1.0×1/10の1乗)→×1/10倍→÷10
・0.01→1.0E-2(1.0×1/10の2乗)→×1/100倍→÷100
・0.001→1.0E-3(1.0×1/10の3乗)→×1/1000倍→÷1000
・になります。ようするに 10 を n 乗すると元の数字になるための指数表記のことですよ。
・よって、『2.43E-19』とは?
 2.43×1/(10の19乗)で、
 2.43×1/10000000000000000000となり、
 2.43×0.0000000000000000001だから、
 0.000000000000000000243という数値を意味します。

補足:
・E+数値は 10、100、1000 という大きい数を表します。
・E-数値は 0.1、0.01、0.001 という小さい数を表します。
・数学では『2.43×10』の次に、小さい数字で上に『19』と表示します。→http://ja.wikipedia.org/wiki/%E6%8C%87%E6%95%B0%E8%A1%A8%E8%A8%98
・最後に『回帰分析』とは何?下の『参考URL』をどうぞ。→『数学』カテゴリで質問してみては?

参考URL:http://ja.wikipedia.org/wiki/%E5%9B%9E%E5%B8%B0%E5%88%86%E6%9E%90

★回答
・最初に『回帰分析』をここで説明するのは少し大変なので『E』のみ説明します。
・回答者 No.1 ~ No.3 さんと同じく『指数表記』の『Exponent』ですよ。
・『指数』って分かりますか?
・10→1.0E+1(1.0×10の1乗)→×10倍
・100→1.0E+2(1.0×10の2乗)→×100倍
・1000→1.0E+3(1.0×10の3乗)→×1000倍
・0.1→1.0E-1(1.0×1/10の1乗)→×1/10倍→÷10
・0.01→1.0E-2(1.0×1/10の2乗)→×1/100倍→÷100
・0.001→1.0E-3(1.0×1/10の3乗)→×1/1000倍→÷1000
・になります。ようするに 10 を n 乗すると元の数字になるた...続きを読む

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

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]などの配列に格納し、それを自由に呼び出し、計算を行いたいと考えております。
基礎がわかっていないためにどうしていいかわかりません。
宜しく御願いします。

Aベストアンサー

構造体を使うのが一番スマートでしょうか。

for k = 1:10
 FILE_DATA(k).t(:, :) = load(sprintf('test%5.5i.txt', k));
end

これで、FILE_DATA(1)~FILE_DATA(10)それぞれに行列tが格納されます。

QMATLABのsaveでファイル名を試行ごとに変えたい

MATLABを使ってるんですが,変数を保存するとき,
saveコマンドで,
save 'filename.txt' A -ASCII -TABS
で,Aのデータがfilename.txtに保存されますよね.
で,このfilenameの名前を試行ごとに変えたいのですが,やりかたが分からないので教えてほしいです.
想像だと,
save 'filename%d.txt' ~
みたいな感じで毎回違う数字をファイル名に入力できるかと考えたんですが,書き方がわかりませんでした.

もしくは,ファイルを出力するフォルダを指定する方法などもわかるとうれしいです.

お願いします.

Aベストアンサー

自分で作ったプログラムソースから抜粋しました。

自分は画像処理を行って、画像330枚をひとつのディレクトリに
書き出しています。

d = dir('cars/*.jpg');

こうすることで、カレントディレクトリにあるcarsというディレクトリ
のファイル(.jpg)の情報を全て構造体として d に書き出します。
あらかじめcarsを作っておきます
構造体の中身は
d.name 'car0004.jpg' //ファイル名
d.data '25-9-2008...'//日付
d.byte '4996' //バイト
d.isdir '0'
d.num 7.4e^...
といった情報が入っています。実際に試してみてください。

maisu=1;
kakidashi=['kensa330/' d(maisu).name];

これでkensa330というフォルダの位置と名前を指定することができます。
workspaceには kakidasi='kensa330/car0004.jpg'となります。

maisuをfor文などでまわすことでcar0001.jpg car0002.jpg ...
と順次新しく変換されます。

あとはがんばってください。

自分で作ったプログラムソースから抜粋しました。

自分は画像処理を行って、画像330枚をひとつのディレクトリに
書き出しています。

d = dir('cars/*.jpg');

こうすることで、カレントディレクトリにあるcarsというディレクトリ
のファイル(.jpg)の情報を全て構造体として d に書き出します。
あらかじめcarsを作っておきます
構造体の中身は
d.name 'car0004.jpg' //ファイル名
d.data '25-9-2008...'//日付
d.byte '4996' //バイト
d.isdir '0'
d.num 7.4e^.....続きを読む

Qmatlabで複数条件のif文を行列計算で行うには?

matlabで複数条件のif文を行列計算で行うには?

matlabではfor文などは行列計算で回したほうが高速化できると聞きました。
for文でのやりかたはわかったのですが、複数条件でのif文ではどのように書けばよいのでしょうか?

自分のプログラムは以下のようなものです


for i=1:100
for j=1:100
theta_kari=atan(abs(B(j,i))/abs(A(j,i)));
if A(j,i)>=0&&B(j,i)>=0
theta(j,i)=theta_kari;
elseif A(j,i)<0&&B(j,i)>=0
theta(j,i)=theta_kari+(pi/2);
elseif A(j,i)<0&&B(j,i)<0
theta(j,i)=theta_kari+pi;
elseif A(j,i)>=0&&B(j,i)<0
theta(j,i)=theta_kari+(pi/2*3);
end
end
end

よろしくお願いします

matlabで複数条件のif文を行列計算で行うには?

matlabではfor文などは行列計算で回したほうが高速化できると聞きました。
for文でのやりかたはわかったのですが、複数条件でのif文ではどのように書けばよいのでしょうか?

自分のプログラムは以下のようなものです


for i=1:100
for j=1:100
theta_kari=atan(abs(B(j,i))/abs(A(j,i)));
if A(j,i)>=0&&B(j,i)>=0
theta(j,i)=theta_kari;
elseif A(j,i)<0&&B(j,i)>=0
theta(j...続きを読む

Aベストアンサー

matlab的に一番速いのは

theta = atan(abs(B./abs(A)) + (A<0 & B>=0)*pi/2 + (A<0 & B<0)*pi + (A>=0 & B>=0)*(pi/2*3);

ですかね。

QMatlab 指定したディレクトリからのload

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

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

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

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

よろしくお願いします。

Aベストアンサー

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

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

QMATLAB で 連番処理をしたい

matalabで画像処理をしたいのですが、 同じ処理を複数回、違う変数に対して行いたいのですがやり方がよくわからりません。

たとえば、
[output1 ,model_color1] = func_AAAA( imgdata,center1);
[output2 ,model_color2] = func_AAAA( imgdata,center2);

[output10 ,model_color10] = func_AAAA( imgdata,center10);
というようなことを行いたいのですが、
いちいち全部記述すると
output5までしかいらない時にわざわざ6~10を消さなければならないので
for文を使って書けるようにしたいと考えています
イメージとしては下のように処理したいのですがこれでは当然エラーになります。
for NUM=1:10
[outputNUM ,model_colorNUM] = func_AAAA( imgdata,centerNUM);
end

num2strを使えばできそうな感じがするのですがどのようにすればよいでしょうか?
お願いします

matalabで画像処理をしたいのですが、 同じ処理を複数回、違う変数に対して行いたいのですがやり方がよくわからりません。

たとえば、
[output1 ,model_color1] = func_AAAA( imgdata,center1);
[output2 ,model_color2] = func_AAAA( imgdata,center2);

[output10 ,model_color10] = func_AAAA( imgdata,center10);
というようなことを行いたいのですが、
いちいち全部記述すると
output5までしかいらない時にわざわざ6~10を消さなければならないので
for文を使って書けるようにしたいと考えています
...続きを読む

Aベストアンサー

cell array を使って,

for NUM=1:10
[output{NUM} ,model_color{NUM}] = func_AAAA( imgdata,center{NUM});
end

こんな感じに書けば,loop できる

doc の matlab-> Programing -> Data Types -> Cell Arrays
辺りを参考にすること.


人気Q&Aランキング