メモ

  • 範囲指定の演算には()が必要 -- 2014-03-30 (日) 15:56:56
  • テンソルにすると,max, meanなどが楽.作り方は,forで回してしまったほうが良い. -- 2014-03-30 (日) 16:25:08

目次

参考ページ

疑問

cellの中身に直接カッコオペレータ

  • 結局,できないのか?

structure

  • st([1 3 5]).member_mat(3, 5)

Matlab文法

cell配列について

cell配列への代入

  • 長さを明示した部分配列にセル配列を突っ込む感じ.
function [ret] = cut_real_trials(realdm)
ret = {};
index = 1;
for a = realdm'
    c = a{3};
    for i = 1:size(c, 2)-1
        first = c(i);
        last = c(i + 1) - 1;

        ret(index, 1:3) = {a{1}(first:last), a{2}, first:last};
    end
    index = index + 1;
end
end

cell配列のforの参照はcell

  • {[1],[2]}をforで回すと,{[1]}が各要素として代入される.
a = {[1],[2]};
for elem = a
  print(elem{1}); % elemではまだcell
end

cell文字列を普通の文字列にする

s = strjoin(s_cell);

mat, cell配列へのバッチ処理

cellfind

  • c.f. matに使うfind
  • 数字
C = {1,5,3,4,2,3,4,5,2,1};
index = find([C{:}] == 5);
  • 文字
cell_array={1,eye(2),true,'foo',10};
string='foo'
logical_cells = cellfun(cellfind('foo'),cell_array)
logical_cells = 
                [0,0,0,1,0]

arrayfun, cellfun

  • aの各行のnormを取る.
d = arrayfun(@(idx) norm(a(idx,:)-m), 1:size(a,1))
  • cell文字列配列の全てに検索.
cellfun(@findstr, dm1(:, 2), cellstr(repmat('post', size(dm1, 1), 1)), 'UniformOutput', false)
cellfun(@(x, y) findstr(x, y), dm1(:, 2), cellstr(repmat('post', size(dm1, 1), 1)), 'UniformOutput', false)
  • @は関数オブジェクトにするくらいの気持ち.ラムダといったほうが近い?
  • Uniformなんとかって言われたら,戻り値は一個にしてくれ,という意味.
  • 引数も全てcellにしなければならない.

mat, cellのforeachの要素

  • 縦列ずつ取って来られる
    • しばしば転置をかける必要がある.

逆PCA

  • PCAをかけた軸が何を表しているか?
[coeff, score, c, d, expected, mu] = pca(tac);
% 第i主成分が元のデータでどのようなデータになっているか?
% tac = score * coeff' + repmat(mu, size(score, 1), 1)
% tac(i, :) = score(i, :) * coeff' + mu
% PCAを張ったデータ以外のデータdataの第i主成分は何か?
% s = (tac_now - repmat(mu, size(tac_now, 1), 1)) * inv(coeff');
% s(i, :) = (tac_now(i, :) - mu) * inv(coeff');

PCA Expectedの見方

  • plot(cumsum(expected), '+');

移動平均

  • filter(デジタルフィルタ)が使える.
    • 分子部分だけ使ってz変換として利用.
r = [0 1 2 3 4];
A=[-1 3];
f=filter(A, 1, r)
f =
     0    -1     1     3     5

線形近似(擬似逆行列演算)

y = X * a + e
  • モデルに対して,
a = X \ y
e = y - X * a
% Enter t and y as columnwise vectors
t = [0 0.3 0.8 1.1 1.6 2.3]';
y = [0.6 0.67 1.01 1.35 1.47 1.25]';
% Form the design matrix
X = [ones(size(t))  exp(-t)  t.*exp(-t)];
% Calculate model coefficients and residental
a = X\y
r = y-X*a

分割plot

  • plotを分割できる.
    • subplot(w, h, index)を宣言してからplot, scatterをすれば分割ができる.
    • title, xlabel, ylabelなどはplotのあと.

sprintf

  • c言語のsprintfとの差分は,"が'となっていることのみ.

多次元データの見方

  • imagesc
    • 全部生で見られる
  • pca
    • 次元を落とす

分布の見方

  • mean, var, hist
  • hist
[nelements,xcenters] = hist(data)
bar(xcenters,nelements)

メモリの節約

  • きちんと使わなくなった変数はsaveして,必要になったらloadするように.

不必要なfind

  • A(A<0.5) = 0でよい.findはいらない.

Shuffle

  • データのシャッフル
    • Period Shuffle Surrogate,実験順序生成のために.
data = data_num(randperm(length(data_num)));

Color Bar

imagescのcolorbarを変えたい時に使う. colormap(-sortrows(-gray))

figを開く・epsに変換する

  • figを開く
    openfig('input.fig');
    
  • epsに変換
    rgb2cm
    openfig('input.fig', 'new', 'invisible');
    print(gcf,'-depsc','-painters','output.eps')

包絡線

http://jp.mathworks.com/matlabcentral/answers/103700-

Matlab環境

初期設定について

  • matlab/project1を作る.
  • project1/load_env.mにpathの設定などを入れる
  • project1/load_project1.mにデータのload関数を入れる.

ワークスペースの保存と再開

  • 作業の終わりにはsave('yyyymmdd.mat','-v7.3');
  • 作業の始めにload('yyyymmdd.mat, '-v7.3');

マルチプロセスによる並列化

  • マルチプロセスでmatlabの実行
screen
matlab -nodisplay
[command]
[ctr-ad] # detach
  • 戻って見たい場合は,
screen -ls
screen -r

vim配列のmatlab

  • 無理らしい
    • いちおう,CUIで起動中に!vi hoge.mとして,matlab内でviを立ち上げることでできなくない.

matlabのオプション

  • http://d.hatena.ne.jp/ruicc/20091216/1260981595 このページには,描画すらもCUIでできるようにする方法が書いてある.
  • '-r' 初回コマンドで指定可能.hoge.mを作って,-r hogeとすれば,あたかもhogeを実行するコマンドになる.
  • '-nodisplay' GUIの表示非表示

Exit Blocker

非保存のファイルを1つ残すべき

トラブルシューティング

カラーバー付きscatter plotなどがベクタ出力できない

  • カラーバーが壊れていて,唯一ベクタ出力できるpainterレンダリングが使えなくなっているらしい.
  • カラーバーを直すスクリプト:filergb2cm.m
    • 参考(これだけでは動かないので,スクリプトが欲しい場合は上のrefを使う.)

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS