退避1
文字列CSVファイルを変数に格納したい場合
数値のCSVファイルだったらcsvreadが使えるが,文字列とかが入っているとそうはいかない.うまくいくのかもしれないが,やり方がわからない.
しかし以下のようにやるとうまくいく.
hoge = importdata('filename.csv')
変数hogeに文字列データとして格納されます.意外と便利.
m-fileを関数として使いたい場合
引数指定のできる関数として。
function m-file(引数)
という一行をm-file自身の頭に書いてあげればよい。
その後引数の変数名で内部で扱うことが出来る。
m-fileがhoge.mならfunction hoge()という具合に
パターンとしては,sigmoid.mというファイルの中身を
function sigmoid = sigmoid(x) sigmoid = 1 / (1+exp(-x));
としておけば,同じディレクトリにsigmoid.mがあれば,外部関数としてsigmoidを呼べる
画像の保存の仕方など
A=imread('lena.tiff'); imshow(A); %画像の読み込み、表示 A(1:8,1:8); %8*8の画素値を表示する imwrite(A,'lena2.tiff',TIFF); %画像をlena2.tiffというファイル名で保存する
MATLABはforが苦手?
MATLABはfor文が遅いと思われがちである。(Cなどと比べると実際に遅い)
しかし、工夫次第ではforを用いずに同様の作業を実現できる。場合によってはCよりも早くなる。
例)
100*200の行列で最大値の要素を求めるとき。
(========= Cなどの場合 =========)
for(0〜100){ for(0〜200){ /*ここで二つの要素を比べて勝者のスコアと座標を保存する*/ } }
(========= 遅いMATLAB =========)
array = rand(200,100); row_num = 1; col_num = 1; tmp_max = array(1,1); for col=1:200 for row=1:100 if(array(col,row) > tmp_max) tmp_max = array(col,row); row_num = row; col_num = col; end end end row_num col_num tmp_max
(========= 早いMATLAB =========)
array = rand(200,100); a = array; [row,col] = size(a); [val,num] = max(reshape(a,1,row*col)); row_num = rem(num,row); if row_num == 0 row_num = row; end col_num = ((num - row_num)/row)+1; row_num col_num a(row_num,col_num)
※初めからforを使わない。
MATLABでビット演算をしたいとき,二進数の桁数をカウントしたいとき
画像(たとえばbitmap)を例えば8階調のビットプレーンで表したい時とかに使えます.
シフト演算がない(らしい)ので,普通にやるとちょいと面倒.最上位ビットと最下位ビットは計算すれば簡単にはじき出せるけど,中間は難しいというか,面倒です.
なので,例えば10進数の115を2進数に変換したとき,左から3bit目が0なのか1なのか調べるのはちょっと苦労する.
もっと言うと392847563を二進数にしたとき左から5bit目とか.
そういう時は以下のようにやる
>> hoge=dec2bin(115) hoge = 1110011
まず二進数に変換しました.
>> whos Name Size Bytes Class ans 1x1 2 char array hoge 1x7 14 char array Grand total is 8 elements using 16 bytes
whosを使うとその二進数が何桁になったかがすぐ分かるので
>> hoge(3) ans = 1
とやると左から3桁目の数字が1であることが分かる.注意する点は右から何桁目ではなく,左からという点である.
同様に,
>> hoge=dec2bin(391847563) hoge = 10111010110110001111010001011 >> whos Name Size Bytes Class ans 1x1 2 char array hoge 1x29 58 char array Grand total is 30 elements using 60 bytes >> hoge(5) ans = 1
となる.超簡単.
whosを使えば桁数がすぐ分かるのでこれも便利なコマンド.
最後に変数ansはchar型になっちゃっているので
>> str2num(ans)
をしてやることを忘れずに!!そうすればdouble型になります.