作者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/cn.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