罗兰关于MATLAB的艺术

将想法转化为MATLAB

通过各种方法

你是否曾经发现自己想要了解一些数据,但不确定算术的意思是是你想要的吗?你也可以考虑几何平均数geomean从统计工具箱)。在图像处理领域,我知道有些人认为使用几何平均值比算术平均值时图像看起来更清晰。今天我要讲的是如何得到精确的几何平均值。

内容

几何平均数

假设有一个向量x所以我们可以忽略不同维度的问题。我将首先为平均值创建函数句柄,并为几何平均值创建标准表达式。这是算术平均数的句柄

Amn = @(x) mean(x)
飞行员= @ (x)的意思是(x)

几何平均值。

GMN = @(x) prod(x)^(1/numel(x))
gmn = @ (x)刺激(x) ^(1 /元素个数(x))

一些数据

下面创建数据,计算均值。

xsmall = 100 *兰德(10,1);均值= [amn(xsmall) gmn(xsmall)]
平均值= 42.403 27.898

更具挑战性的数据

让我们假设一些更大的数据,然后计算均值。

超大= 1 e300 *兰德(1000 1);均值= [amn(xlarge) gmn(xlarge)]
平均值= 5.1363e+299 Inf

当我们得到算术平均数的有限答案时,我们得到几何平均值。如果你看一下几何平均值的表达式,我们首先计算所有数的乘积,然后取n次方根。所以我们超过最大浮点数在计算中,因此得到无限的结果。有没有办法避免这种情况,至少暂时避免?是的!

更安全的几何平均值表达式

我们可以把某些数的乘积的计算重新定义为总和取自然对数,然后取指数。为了得到n次方根,我们除以总和通过n,元素的数量。这是几何平均值的新表达式。

x = @(x) exp(sum(log(x))/numel(x))
gm2 = @ (x) exp(总和(日志(x)) /元素个数(x))

这是应用于两个数据集的几何平均值。

[gm2 (xsmall) gm2(超大)]
Ans = 27.898 3.8763e+299

您可以看到,对于可能更典型的数据,我们得到了相同的结果,并将我们自己与使用较大数据值的糟糕数值结果隔离开来。

如何平均数据?

如果您有可能包含值,您可以使用nanmean从统计工具箱。你有其他合适的表达式来平均你的数据集吗?请让我知道在这里




MATLAB®7.10发布

|
  • 打印
  • 发送电子邮件

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。