【问题标题】:How can I build a Scilab / MATLAB program that averages a 3D matrix?如何构建平均 3D 矩阵的 Scilab / MATLAB 程序?
【发布时间】:2013-10-18 02:42:25
【问题描述】:

我需要制作一个 scilab / MATLAB 程序,对给定大小 (N x N x N) 的立方体中的 3D 矩阵的值进行平均。我永远感谢任何可以帮助我的人。

提前致谢

【问题讨论】:

  • mean(M(:)) 其中M 是矩阵?
  • 重叠还是不重叠?对于非重叠,使用 30x30x30 矩阵和 5x5x5 立方体,输出将为 6x6x6。这就是你想要的吗?

标签: matlab matrix 3d average scilab


【解决方案1】:

在 MATLAB 中,mat2cellcellfun 组成了一个出色的团队来处理 N 维非重叠块,我认为问题中的情况就是如此。一个示例场景:

  • [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);

如果您需要复制平均值的全尺寸输出,则有一个简单的解决方案,涉及cellfun'UniformOutput' 选项,后跟cell2mat

如果你想要重叠的立方体和相同大小的输出作为输入,你可以简单地做convn(A,ones(blockDims)/prod(blockDims),'same')

编辑:简化、清晰、通用和修正。

【讨论】:

    【解决方案2】:
        N = 10; %Same as OP's parameter
        M = 10*N;%The input matrix's size in each dimensiona, assumes M is an integer multiple of N
        Mat = rand(M,M,M); % A random input matrix
        avgs = zeros((M/N)^3,1); %Initializing output vector
    
        l=1; %indexing
        for i=1:M/N %indexing 1st coord
            for j=1:M/N %indexing 2nd coord
                for k=1:M/N % indexing third coord
                    temp = Mat((i-1)*N+1:i*N,(j-1)*N+1:j*N,(k-1)*N+1:k*N); %temporary copy
                    avg(l) = mean(temp(:)); %averaging operation on the N*N*N copy
                    l = l+1; %increment indexing
                end
            end
        end
    

    一旦掌握了索引的要点,就可以消除 for 循环和复制。

    【讨论】:

      猜你喜欢
      • 2013-06-16
      • 2015-01-24
      • 1970-01-01
      • 2011-10-21
      • 1970-01-01
      • 1970-01-01
      • 2018-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多