python中函数的均方根

Posted

技术标签:

【中文标题】python中函数的均方根【英文标题】:Root mean square of a function in python 【发布时间】:2017-04-19 05:17:49 【问题描述】:

我想在 Python 中计算函数的均方根。我的函数采用简单的形式,例如 y = f(x)。 x 和 y 是数组。

我尝试了Numpy and Scipy Docs,但找不到任何东西。

【问题讨论】:

您要计算的确切函数是什么? y 的均方根值? 如果您可以添加示例数组和预期的解决方案也会有所帮助... 【参考方案1】:

我将假设您要计算以下伪代码给出的表达式:

ms = 0
for i = 1 ... N
    ms = ms + y[i]^2
ms = ms / N
rms = sqrt(ms)

y 的元素的平方值的均值的平方根。

在 numpy 中,您可以简单地平方 y,取其 mean,然后取其 square root,如下所示:

rms = np.sqrt(np.mean(y**2))

所以,例如:

>>> y = np.array([0, 0, 1, 1, 0, 1, 0, 1, 1, 1])  # Six 1's
>>> y.size
10
>>> np.mean(y**2)
0.59999999999999998
>>> np.sqrt(np.mean(y**2))
0.7745966692414834

如果您想问其他问题,请澄清您的问题。

【讨论】:

非常感谢。我仍然想知道一些事情。***中的定义部分说,RMS实际上是一个限制。我的意思是它一直在继续。但是在您的回答中,只考虑了一级。我认为我们在计算过程中以某种方式忽略了其余部分?你的答案有效。但我要求这样做是为了澄清整个主题。 @ordinary 如果您尝试计算正弦波的 RMS 值(即 f(x) 是正弦函数)或类似的,那么您需要执行 积分我>。这在此处近似为总和。限制出现是因为您需要为您的总和采取无限小的间隔。换句话说,如果您在x 中使用更精细的分辨率,您可以获得更好的RMS 值估计。 警告:在 numpy 中,如果数字与其类型(python 中的 dtype)相比太大,则幂函数可能会返回负值。为避免这种情况,有时强制转换值很有用。示例:>>np.sqrt(np.mean(y.astype(np.dtype(np.int64)) ** 2 ))。代码不是很好,但它会完成工作! @sandoval31 您可能希望将类型转换为浮点数,而不是更大的整数。由于 RMS 通常是非整数,因此您最好使用y.astype(float)【参考方案2】:

你可以使用 sklearn 函数

from sklearn.metrics import mean_squared_error
rmse = mean_squared_error(y_actual,[0 for _ in y_actual], squared=False)

【讨论】:

以上是关于python中函数的均方根的主要内容,如果未能解决你的问题,请参考以下文章

使用 R 的分级 GAM 结果的均方根偏差

R语言使用DALEX包的model_performance函数对h2o包生成的多个算法模型进行残差分布分析并使用箱图进行残差分布的可视化直方图中的大红点为残差的均方根误差RMSE

r语言计算均方误差怎么判断

python 如何对ndarray 每个变量求平方根?

我如何从均方根误差中理解我的模型过拟合或欠拟合?

使用牛顿-拉弗森法定义平方根函数(Newton-Raphson method Square Root Python)