我想编写一个“语法糖”Octave 或 Matlab 零填充函数,用户向其发送一个 n 维对象和一个 <= n 条目的向量。向量包含对象的新的、相等的或更大的维度,并且对象被零填充以匹配这些维度。任何未指定的尺寸都将单独保留。一种预期用途是,例如,给定 3d 医学图像体积的 5d 块 X,我可以调用
y = simplepad(X, [128 128 128]);
因此将前三个维度填充为 2 的幂以进行小波分析(实际上我使用单独的函数 nextpwr2 来查找这些维度),同时保留其他维度。
我已经绞尽脑汁想如何编写这种方法来避免可怕的评估,但到目前为止还没有找到方法。任何人都可以提出解决方案吗?这或多或少是我所拥有的:
function y = simplepad(x, pad)
szx = size(x);
n_pad = numel(pad);
szy = [pad szx(n_pad+1:end)];
y = zeros(szy);
indices_string = '(';
for n = 1:numel(szx)
indices_string = [indices_string, '1:', num2str(szx(n))];
if n < numel(szx)
indices_string = [indices_string, ','];
else
indices_string = [indices_string, ')'];
end
end
command = ['y',indices_string,'=x;'];
eval(command);
end