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

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

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

【问题讨论】:

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

标签: python arrays python-3.x numpy scipy


【解决方案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)

【讨论】:

    猜你喜欢
    • 2012-07-28
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    相关资源
    最近更新 更多