退避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型になります.