请问如何将多维资料送给blockproc进行运算?

楼主: YoursEver (猪是妳)   2016-01-13 02:15:48
现在遇到的状况是这样:
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
==
不好意思,现在大脑快炸了,
没办法确定是不是能明确表达我的意思,
若让版友们看不懂以致于无法讨论,
我明天再修文改进.
谢谢.
作者: name0625 (lawpy)   2016-01-13 11:21:00
将(x,y,z,w,k)转成(x,y,k*z*w)用reshape就可以了吧?
作者: celestialgod (天)   2016-01-13 17:41:00
我觉得要看你fun1的运算再决定怎么改写像是你用了repmat或是把I做了复制,创了几个跟I一样大的ARRAY,都有可能增加内存的使用量如果减少这些动作 减少暂存变量或是定期清理 应该不至于太常爆掉不然最简单的方法就直接两层循环去跑了

Links booklink

Contact Us: admin [ a t ] ucptt.com