眼看着闸门打开了,我还不如投入我的两分钱。
带有循环的解决方案效果很好,但您也可以消除循环,但会牺牲可读性。首先,您可以使用以下命令获取最后一列中的唯一值unique
:
stringKeys = unique(datABC(:,3))'
然后您可以使用匿名函数并cellfun
计算每个键的出现次数:
memberFun = @(x) ismember(datABC(:,3),x);
keyOccurrences = cellfun(@(x) nnz(memberFun(x)),stringKeys)
要计算前两列中每一列的相应数据的平均值,您可以再次使用cellfun
非均匀输出:
colMeanFun = @(x) mean(reshape([datABC{memberFun(x),1:2}],[],2),1);
colMeans = cellfun(colMeanFun,stringKeys,'UniformOutput',false);
colMeans = vertcat(colMeans{:})
也看看 ate strcmpmi
,它可以用来代替ismember
但会忽略大小写。
测试数据:
datABC = {[45] [67] 'A'; [34] [44] 'A'; [11] [84] 'A'; ...
[23] [68] 'A'; [34] [44] 'B'; [30] [94] 'B'; ...
[304] [414] 'C'; [78] [110] 'C'; [34] [120] 'C'}; % 9-by-3