Предположим, что у меня есть следующий массив:Среднее значение MATLAB, соответствующее каждому номеру столбца в матрице?
A=[1 2
1 4
2 6
3 5
5 7
1 9
2 7];
Что является наиболее эффективным (предпочтительно один вкладыш) способ в MATLAB, чтобы автоматически получить матрицу, которая держит среднее значение вторых элементов столбцов для каждого уникального элемента первая колонка? Результатом для A
выше было бы:
B=[1 mean([2 4 9])
2 mean([6 7])
3 mean([5])
5 mean([7])];
Заранее благодарим за внимание!
'accumarray' будет терпеть неудачу, если' A (:, 1) 'содержит что-либо, кроме небольших положительных целых чисел. Но вы можете легко обойти эту проблему, заменив 'A (:, 1)', третьим выходом 'unique (A (:, 1))'. И затем вы также можете отказаться от вызова «nonzeros». –
Кроме того, если важна производительность, я рекомендую заменить 'accumarray (... @ mean)' на 'accumarray (..., @ sum) ./ accumarray (... 1, [], @ sum)', то есть вычислить суммировать и подсчитывать и делить вручную. В прошлый раз, когда я проверял, это было намного быстрее, потому что 'accumarray' не оптимизирован для использования с' @ mean'. –
@ dan-man Ничего себе. Спасибо за советы. Я обновлю ответ. – TroyHaskin