%% define value matrix and logical indexing matrix
values=[1 2 3 4; 5 6 7 8; 9 10 11 12];
indices=[1 0 0 1; 0 1 0 1; 1 1 0 0];
indices=indices==1; %convert to logical
%% calculate column-wise average
mean(values(indices),1)
答案 0 :(得分:4)
accumarray
为基础的方法将列索引用作accumarray
的分组变量:
[~, col] = find(indices);
result = accumarray(col(:), values(indices), [size(values,2) 1], @mean, NaN).';
请注意:
第二行使用(:)
强制第一个输入成为列向量。之所以需要这样做,是因为第一行可能会根据行col
的大小将indices
生成为行或列向量。
NaN
用作填充值。这被指定为accumarray
的第五个输入。
accumarray
的第三个输入定义输出大小。如果accumarray
的最后一列仅包含indices
,则必须明确指定它(而不是让false
找出来)。
将元素逐个乘以indices
。这样会将不需要的条目转换为NaN
,然后mean
可以使用'omitnan'
选项将其忽略:
result = mean(values.*indices./indices, 1, 'omitnan');
逐个元素乘以indices
,将每一列相加,然后逐个除以indices
每列的总和:
result = sum(values.*indices, 1) ./ sum(indices, 1);