B = randn(1,25,10);
Z = [1;1;1;2;2;3;4;4;4;3];
好的,所以,我想找到Z = 1的位置(或任何彼此相等的数字),然后在这些特定位置的25个点中的每一个的平均值。在示例中,您将以1 * 25 * 4阵列结束。
有一种简单的方法吗?
我并不是最熟悉Matlab的人。
答案 0 :(得分:0)
首先要做的是:打破问题。
完成后,您可以开始看到它是一个非常标准的循环和"选择符合条件的列#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])
继续如上