我想寫一個「語法糖」Octave或Matlab的零填充函數,用戶向其發送一個n維對象和向量< = n個條目。矢量包含對象的新的,相等或更大的尺寸,並且該對象被零填充以匹配這些尺寸。任何未指定的尺寸都保留。一個預期的用途是,例如給定的3D醫學圖像體積的5D塊X,我可以調用Matlab/Octave:如何編寫不含eval的n維零填充算法
y = simplepad(X, [128 128 128]);
,因此墊的前三個維度的兩個用於小波分析的功率(實際上我使用一個單獨功能nextpwr2找到這些尺寸),而留下其他人。
我已經絞盡腦汁寫出這種避免可怕的eval的方法,但是到目前爲止找不到方法。任何人都可以提出解決方案這裏是或多或少我有什麼:
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
很不錯的。我不得不重讀這幾次。 :) – beaker
是的,最後一行只是將n-dim數組的最後一個元素設置爲零。 –
一個小問題:如果尺寸已經等於'pad',那麼將用零覆蓋現有值。 – gnovice