В обобщении моего предыдущего вопроса , как можно выполнить средневзвешенное значение по элементам ячейки (которые являются и должны оставаться самими массивами)?
Я бы начал сизменив ответ gnovice следующим образом:
dim = ndims(c{1}); %# Get the number of dimensions for your arrays
M = cat(dim+1,c{:}); %# Convert to a (dim+1)-dimensional matrix
meanArray = sum(M.*weigth,dim+1)./sum(weigth,dim+1); %# Get the weighted mean across arrays
И перед этим убедитесь, что weight
имеет правильную форму.Я думаю, что нужно учесть три случая:
- weight = 1 (или любая константа) => вернуть обычное среднее значение
- цифра (вес) == длина(c) => вес для каждого элемента ячейки c {n} (но равным для каждого элемента массива при фиксированном n)
- цифра (вес) == цифра (cell2mat (c)) => каждый массив -элемент имеет свой собственный вес ...
Случай 1 прост, а случай 3 маловероятен, поэтому в данный момент меня интересует случай 2: как я могу преобразовать вес в массив, чтобыM.*weight
имеет правильные размеры в сумме выше?Конечно, также приветствуется ответ, который показывает другой способ получения взвешенного усреднения.
edit На самом деле, случай 3 еще более тривиален (что за тавтология, извинения) чем в случае 1, если вес имеет ту же структуру, что и c.
Вот пример того, что я имею в виду для случая 2:
c = { [1 2 3; 1 2 3], [4 8 3; 4 2 6] };
weight = [ 2, 1 ];
должен вернуть
meanArray = [ 2 4 3; 2 2 4 ]
(например, для первого элемента (2 * 1 + 1 * 4) / (2 + 1) = 2)