請問如何將多維資料送給blockproc進行運算?

看板MATLAB作者 (銀英傳出webgame!?)時間9年前 (2016/01/13 02:15), 編輯推噓0(007)
留言7則, 2人參與, 最新討論串1/1
現在遇到的狀況是這樣: 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://www.ptt.cc/bbs/MATLAB/M.1452622550.A.E6B.html

01/13 11:21, , 1F
將(x,y,z,w,k)轉成(x,y,k*z*w)用reshape就可以了吧?
01/13 11:21, 1F

01/13 17:41, , 2F
我覺得要看你fun1的運算再決定怎麼改寫
01/13 17:41, 2F

01/13 17:41, , 3F
像是你用了repmat或是把I做了複製,創了幾個跟I一樣
01/13 17:41, 3F

01/13 17:42, , 4F
大的ARRAY,都有可能增加記憶體的使用量
01/13 17:42, 4F

01/13 17:42, , 5F
如果減少這些動作 減少暫存變數或是
01/13 17:42, 5F

01/13 17:42, , 6F
定期清理 應該不至於太常爆掉
01/13 17:42, 6F

01/13 17:43, , 7F
不然最簡單的方法就直接兩層迴圈去跑了
01/13 17:43, 7F
文章代碼(AID): #1MbKBMvh (MATLAB)
文章代碼(AID): #1MbKBMvh (MATLAB)