特定のサイズ (N x N x N) の立方体で 3D 行列の値を平均化する scilab / MATLAB プログラムを作成する必要があります。私を助けてくれる人には永遠に感謝しています。
前もって感謝します
MATLAB では、 N 次元の重複しないブロックに取り組むための優れたチームmat2cell
をcellfun
作ります。質問の場合と同様です。シナリオ例:
A
= [30x30x30] 配列bd = [5 5 5]
、立方体のサイズB
= [6x6x6] ブロック平均の配列上記を達成するための解決策は次のとおりです。
dims = [30 30 30]; bd = [5 5 5];
A = rand(dims);
f = floor(dims./bd);
remDims = mod(dims,bd); % handle dims that are not a multiple of block size
Ac = mat2cell(A,...
[bd(1)*ones(f(1),1); remDims(1)*ones(remDims(1)>0)], ....
[bd(2)*ones(f(2),1); remDims(2)*ones(remDims(2)>0)], ....
[bd(3)*ones(f(3),1); remDims(3)*ones(remDims(3)>0)] );
B = cellfun(@(x) mean(x(:)),Ac);
平均値が複製されたフル サイズの出力が必要な場合は、 の後に を使用する簡単な解決策があり'UniformOutput'
ます。cellfun
cell2mat
立方体を重ね、入力と同じサイズの出力が必要な場合は、単純にconvn(A,ones(blockDims)/prod(blockDims),'same')
.
EDIT : 簡素化、明快さ、一般性、および修正。