MATLAB: совокупное геометрическое среднее

У меня матрица 2х3 m = [1.1, 2.0, 0.5 ; 0.9, 1.5, 1.1];, Мне нужно вычислить совокупное геометрическое среднее по второму измерению, то есть полученную матрицу results также должен иметь такой же размер (2х3). Это в основном сопоставимо с использованием cumprod с расширениями, которые мне нужно взять мощность 1/ п где n это номер столбца.

results должен выглядеть так:

[(1.1)^(1/1), (1.1 * 2.0)^(1/2), (1.1 * 2.0 * 0.5)^(1/3) ;
 (0.9)^(1/1), (0.9 * 1.5)^(1/2), (0.9 * 1.5 * 1.1)^(1/3)]

results = cumprod(m,2) поставляет компоненты умножения. Однако, какой самый умный способ получить соответствующие полномочия?

1 ответ

Решение

Используйте силу bsxfun -

bsxfun(@power, cumprod(m,2), 1./(1:size(m,2)))

Пробный прогон -

>> m
m =
    1.1000    2.0000    0.5000
    0.9000    1.5000    1.1000
>> bsxfun(@power, cumprod(m,2), 1./(1:size(m,2)))
ans =
    1.1000    1.4832    1.0323
    0.9000    1.1619    1.1409
>> [(1.1)^(1/1), (1.1 * 2.0)^(1/2), (1.1 * 2.0 * 0.5)^(1/3) ;
    (0.9)^(1/1), (0.9 * 1.5)^(1/2), (0.9 * 1.5 * 1.1)^(1/3)]
ans =
    1.1000    1.4832    1.0323
    0.9000    1.1619    1.1409

На более новых версиях MATLAB, с implicit-expansion выражение будет упрощено до -

cumprod(m,2).^ (1./(1:size(m,2)))
Другие вопросы по тегам