MATLAB:累积几何平均值

And*_*ndi 2 matlab geometric-mean

我有一个2x3矩阵m = [1.1, 2.0, 0.5 ; 0.9, 1.5, 1.1];.我需要计算沿第二维的累积几何平均值,即结果矩阵results也必须具有相同的维度(2x3).它与使用cumprod1/n功率所需的扩展基本相当,其中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)]
Run Code Online (Sandbox Code Playgroud)

results = cumprod(m,2)提供乘法组件.但是,为了获得适当的权力,最聪明的方法是什么?

Div*_*kar 7

使用电力bsxfun-

bsxfun(@power, cumprod(m,2), 1./(1:size(m,2)))
Run Code Online (Sandbox Code Playgroud)

样品运行 -

>> 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
Run Code Online (Sandbox Code Playgroud)

在较新的MATLAB版本中,implicit-expansion表达式将简化为 -

cumprod(m,2).^ (1./(1:size(m,2)))
Run Code Online (Sandbox Code Playgroud)