1

特定のサイズ (N x N x N) の立方体で 3D 行列の値を平均化する scilab / MATLAB プログラムを作成する必要があります。私を助けてくれる人には永遠に感謝しています。

前もって感謝します

4

2 に答える 2

2

MATLAB では、 N 次元の重複しないブロックに取り組むための優れたチームmat2cellcellfun作ります。質問の場合と同様です。シナリオ例:

  • [IN]: A= [30x30x30] 配列
  • [IN]: bd = [5 5 5]、立方体のサイズ
  • [OUT]: 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'ます。cellfuncell2mat

立方体を重ね、入力と同じサイズの出力が必要な場合は、単純にconvn(A,ones(blockDims)/prod(blockDims),'same').

EDIT : 簡素化、明快さ、一般性、および修正。

于 2013-10-18T04:04:37.403 に答える