跳到主要內容

在Matlab中使用in-place或是pass-by-reference的變數

有在用Matlab的人都應該知道Matlab中沒有Pointer的觀念,也沒有pass-by-reference的方法。剛好最近在用Matlab,迫切需要這樣的一個功能。在網路上找了半天都沒有找到一個比較好的作法。後來自己查到了Matlab的OOP的使用及operator overloading的方式。靈光一閃的想到可以利用繼承handle class及operator overloading的方式來達成十分近似的效果。就寫了一個shared.m的class。



我已經放到Matlab Central去了。有興趣的人可以去下載。基本上如果你用了這個class你可以達到下面正常Matlab變數無法做到的事情。

a = [1:100];
b = a;
a(10) = 0;
b(10) = ?? %% 這裡的b(10)仍舊會是10。不會變成0。因為Matlab把整個array copy一份。

a= shared([1:100]);
b = a;
a (10) = 0;
b(10) = ?? %% 透過shared的方式,b(10)也會變成0。

假設你一個function,修改了input的argument。

function inplace_add(a, b)
a(1) = a(1) + b(1);
end

如果你使用一般的maltab變數傳到這個function內,當function執行後,這個參數不會有任何改變。不過如果你傳的是一個shared的變數,這個參數將會被改變。

Shared Variable: http://www.mathworks.com/matlabcentral/fileexchange/24742
張貼留言

這個網誌中的熱門文章

解決Python script無法在cp65001的console下執行的問題

你是否有這樣的經驗,明明沒問題的script,拿到某的電腦一直看到下面的訊息而無法執行。
LookupError: unknown encoding: cp65001 cp65001是什麼鬼!?其實,它就是UTF8阿!只是,Microsoft喜歡叫他cp65001(code page 65001號)。附帶一提,我們常用的Big5是cp950。想要知道你目前所使用的code page可以在Windows的console視窗執行

Portable Python

我常常需要把Python寫的script帶到其他電腦使用,因此,一個免安裝,可攜帶的Python就顯得十分重要。最近看過了幾個可攜式Python的方案,下面這個PortablePython是我覺得最合我意的方案。因為它提供了大部分會用到的Python module及工具,甚至連wxPython及PyGame也有。同時也有好用的Python編輯器PyScripter。所有開發Python所需的開發工具都一應俱全了!把它放到隨身碟中,就不用到處幫人安裝Python了。

PortablePython: http://www.portablepython.com/

有點兒怪的生蛋拌麵

前幾日在看日本的料理東西軍時,看到了一個料理是把麵煮好以後再把生蛋打上去攪和著吃。看起來滋味不俗!電視節目結束後立馬衝入廚房準備材料開始實作!

家裡沒有什麼蕎麥麵,就隨便拆了包泡麵煮熟,順便把冰箱裏面擺很久的甜不辣與貢丸拿出來一起煮熟,然後切條切片後放在麵上當配菜。