*メモ [#y7ee86b8] - 範囲指定の演算には()が必要 -- &new{2014-03-30 (日) 15:56:56}; - テンソルにすると,max, meanなどが楽.作り方は,forで回してしまったほうが良い. -- &new{2014-03-30 (日) 16:25:08}; *目次 [#ua6b73f9] #contents *下位ページ [#o4feb489] -[[MathWorks]] -[[Simlink]] *参考ページ [#p50f33f1] -http://www.sc.ctrl.titech.ac.jp/~saitou/matlab.html#struct --matlabでObject指向 *疑問 [#t7b24b90] **cellの中身に直接カッコオペレータ [#i28b54ae] -結局,できないのか? **structure [#c1290fa4] -st([1 3 5]).member_mat(3, 5) *Matlab文法 [#o53832c0] **cell配列について [#w59b3972] -{}, ()の使い分けなど. -http://bun6memo.blogspot.jp/2013/06/matlab.html **cell配列への代入 [#md068e3f] -長さを明示した部分配列にセル配列を突っ込む感じ. 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 [#ia5f305f] -{[1],[2]}をforで回すと,{[1]}が各要素として代入される. a = {[1],[2]}; for elem = a print(elem{1}); % elemではまだcell end **cell文字列を普通の文字列にする [#h67149f1] s = strjoin(s_cell); **mat, cell配列へのバッチ処理 [#p87e2f6b] ***cellfind[#ce1902e6] -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 [#o1591a86] -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の要素 [#ad922bd2] -縦列ずつ取って来られる --しばしば転置をかける必要がある. **逆PCA [#yf15bfd8] -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の見方 [#e8858c8d] -plot(cumsum(expected), '+'); **移動平均 [#a0f2dcf6] -filter(デジタルフィルタ)が使える. --分子部分だけ使ってz変換として利用. r = [0 1 2 3 4]; A=[-1 3]; f=filter(A, 1, r) f = 0 -1 1 3 5 **線形近似(擬似逆行列演算) [#v2c9821f] -http://www.mathworks.co.jp/jp/help/matlab/data_analysis/programmatic-fitting.html#f1-7306 -モデル 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 [#ff2e49a9] -plotを分割できる. --subplot(w, h, index)を宣言してからplot, scatterをすれば分割ができる. --title, xlabel, ylabelなどはplotのあと. **sprintf [#v6a52c3a] -c言語のsprintfとの差分は,"が'となっていることのみ. **多次元データの見方 [#qc3b0842] -imagesc --全部生で見られる -pca --次元を落とす **分布の見方 [#u05508a2] -mean, var, hist -hist [nelements,xcenters] = hist(data) bar(xcenters,nelements) **メモリの節約 [#he53d0ec] -きちんと使わなくなった変数はsaveして,必要になったらloadするように. **不必要なfind [#k7eb807c] -A(A<0.5) = 0でよい.findはいらない. **Shuffle [#cf53254e] -データのシャッフル --Period Shuffle Surrogate,実験順序生成のために. data = data_num(randperm(length(data_num))); **Color Bar [#e541ff6d] imagescのcolorbarを変えたい時に使う. colormap(-sortrows(-gray)) **figを開く・epsに変換する [#b6cbbcea] -figを開く openfig('input.fig'); -epsに変換 rgb2cm openfig('input.fig', 'new', 'invisible'); print(gcf,'-depsc','-painters','output.eps') **包絡線 [#ecc76aff] http://jp.mathworks.com/matlabcentral/answers/103700- *Matlab環境 [#vadf232b] ** 初期設定について [#l67d276d] -matlab/project1を作る. -project1/load_env.mにpathの設定などを入れる -project1/load_project1.mにデータのload関数を入れる. **ワークスペースの保存と再開 [#h8999827] -作業の終わりにはsave('yyyymmdd.mat','-v7.3'); -作業の始めにload('yyyymmdd.mat, '-v7.3'); ** マルチプロセスによる並列化 [#h006c598] -マルチプロセスでmatlabの実行 screen matlab -nodisplay [command] [ctr-ad] # detach -戻って見たい場合は, screen -ls screen -r ** vim配列のmatlab [#e9f55ae6] -無理らしい --いちおう,CUIで起動中に!vi hoge.mとして,matlab内でviを立ち上げることでできなくない. ** matlabのオプション [#ib5a0a39] -http://d.hatena.ne.jp/ruicc/20091216/1260981595 このページには,描画すらもCUIでできるようにする方法が書いてある. -'-r' 初回コマンドで指定可能.hoge.mを作って,-r hogeとすれば,あたかもhogeを実行するコマンドになる. -'-nodisplay' GUIの表示非表示 **Exit Blocker [#pede0f4b] 非保存のファイルを1つ残すべき *トラブルシューティング [#e9621601] **カラーバー付きscatter plotなどがベクタ出力できない [#m5e5d8a1] -カラーバーが壊れていて,唯一ベクタ出力できるpainterレンダリングが使えなくなっているらしい. -カラーバーを直すスクリプト:&ref(./rgb2cm.m); --[[参考>http://jp.mathworks.com/matlabcentral/fileexchange/35469-rgb2cm-fix-rgb-color-data-in-painters-mode/all_files]](これだけでは動かないので,スクリプトが欲しい場合は上のrefを使う.) |