作者YoursEver (銀英傳出webgame!?)
看板MATLAB
標題請問如何將多維資料送給blockproc進行運算?
時間Wed Jan 13 02:15:48 2016
現在遇到的狀況是這樣:
0. 要處理的資料是5維: I(x,y,z,w,k),
1. 目前已有一個fun1: function J = fun1( I )
J矩陣的大小恰好為J(x,y,k)
2. 我的問題是:
因為 I 的資料量太大 (ex: 3GB),且fun1在計算時需要的memory大約是4I~25I,
因此,
想請問是否有辦法能透過類似呼叫blockproc的方式,
自動把I(x,y,z,w,k)拆成sub-volume後,再交給fun1來處理?
(希望能針對x, y兩個軸拆)
3. 或是,是否有機會能靠
function I_3d = fun2( I ),
%將5D轉成3D
及
function I_5d = fun3( I_3d ), %
將3D轉回5D
來輔助完成 blockproc?
當然,在這個狀況下 size(I_3d) == [x,y,k*z*w],
而 size(I_5d) == [M,N,z,w,k], 其中M,N是切割成sub-volume時的某個patch大小,
整個pseudo-code則將變為:
I_3d = fun2( I ); %將I(x,y,z,w,k)轉成(x,y,k*z*w)
Result = blockproc(I_3d, [M, N], @fun1_prime);
function OUTPUT = fun1_prime( INPUT )
I_5d = fun3( INPUT ) %將(M,N,k*z*w)轉回(M,N,z,w,k)
OUTPUT = fun1( I_5d );
end
==
不好意思,現在大腦快炸了,
沒辦法確定是不是能明確表達我的意思,
若讓版友們看不懂以致於無法討論,
我明天再修文改進.
謝謝.
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.161.51.131
※ 文章網址: https://webptt.com/m.aspx?n=bbs/MATLAB/M.1452622550.A.E6B.html
1F:→ name0625: 將(x,y,z,w,k)轉成(x,y,k*z*w)用reshape就可以了吧? 01/13 11:21
2F:→ celestialgod: 我覺得要看你fun1的運算再決定怎麼改寫 01/13 17:41
3F:→ celestialgod: 像是你用了repmat或是把I做了複製,創了幾個跟I一樣 01/13 17:41
4F:→ celestialgod: 大的ARRAY,都有可能增加記憶體的使用量 01/13 17:42
5F:→ celestialgod: 如果減少這些動作 減少暫存變數或是 01/13 17:42
6F:→ celestialgod: 定期清理 應該不至於太常爆掉 01/13 17:42
7F:→ celestialgod: 不然最簡單的方法就直接兩層迴圈去跑了 01/13 17:43