基于另一个数组的多维数组的平均部分(Matlab)

时间:2014-10-14 09:23:01

标签: matlab multidimensional-array average

B = randn(1,25,10);
Z = [1;1;1;2;2;3;4;4;4;3];

好的,所以,我想找到Z = 1的位置(或任何彼此相等的数字),然后在这些特定位置的25个点中的每一个的平均值。在示例中,您将以1 * 25 * 4阵列结束。

有一种简单的方法吗?

我并不是最熟悉Matlab的人。

2 个答案:

答案 0 :(得分:0)

首先要做的是:打破问题。

  1. 定义组(即唯一Z值的集合)
  2. 查找属于这些组的元素
  3. 取平均值。
  4. 完成后,您可以开始看到它是一个非常标准的循环和"选择符合条件的列#34;。

    有些事情:

    B = randn(1,25,10);
    Z = [1;1;1;2;2;3;4;4;4;3];
    
    groups = unique(Z); %//find the set of groups
    C = nan(1,25,length(groups)); %//predefine the output space for efficiency
    for gi = 1:length(groups) %//for each group
      idx = Z == groups(gi); %//find it's members
      C(:,:,gi) = mean(B(:,:,idx), 3); %//select and mean across the third dimension
    end
    

答案 1 :(得分:0)

如果B = randn(10,25);那么它很容易,因为Matlab函数通常在行中运行。

使用逻辑索引:

ind = Z == 1;
mean(B(ind,:));

如果您正在处理多个维度,请使用permute(如果您实际拥有3个维度或更多维度,请使用reshape)以使您自己达到如上所述平均行数的程度:

B = randn(1,25,10);
BB = permute(B, [3,2,1])

继续如上