MATLAB:累积几何平均数
MATLAB: cumulative geometric mean
我有一个 2x3 矩阵 m = [1.1, 2.0, 0.5 ; 0.9, 1.5, 1.1];
。我需要计算沿第二个维度的累积几何平均值,即生成的矩阵 results
也必须具有相同的维度 (2x3)。它基本上与使用 cumprod
和我需要的 1/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)]
results = cumprod(m,2)
传递乘法分量。但是,为了获得适当的权力,最聪明的方法是什么?
使用bsxfun
-
的power
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)))
我有一个 2x3 矩阵 m = [1.1, 2.0, 0.5 ; 0.9, 1.5, 1.1];
。我需要计算沿第二个维度的累积几何平均值,即生成的矩阵 results
也必须具有相同的维度 (2x3)。它基本上与使用 cumprod
和我需要的 1/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)]
results = cumprod(m,2)
传递乘法分量。但是,为了获得适当的权力,最聪明的方法是什么?
使用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)))