Видя, как открываются шлюзы, я мог бы также выбросить свои два цента.
Решение с петлей хорошо работает, но вы также можете устранить петли за счет удобочитаемости. Во-первых, вы можете получить уникальные значения в последнем столбце с unique
:
stringKeys = unique(datABC(:,3))'
Затем вы можете использовать anonymous function и 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{:})
Также посмотрите 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
Должен сдерживать себя ... делать ... нет ... сообщение ... ответ. – chappjc
подсказка ... cellfun - это один из способов сделать это –
Это, вероятно, поможет вам: http://stackoverflow.com/questions/8061344/how-to-search-for-a-string-in-cell-array- in-matlab – Daniel