【问题标题】:How does one compute the norm of a function in python?如何计算python中函数的范数?
【发布时间】:2020-11-23 23:28:43
【问题描述】:

我想计算一个函数的函数范数。我的用例是两个函数的距离,但这不如在 python 中以正确的方式计算它重要。查看我所做的文档:

import numpy as np
import scipy.integrate as integrate

def functional_diff_norm(f1, f2, lb, ub, p=2):
    """
    Computes norm:

    ||f||_p = (int_S |f|^p dmu)^1/p

    https://en.wikipedia.org/wiki/Lp_space
    """
    norm = integrate.quad(lambda x: abs(f1(x) - f2(x))**p, lb, ub)[0]**(1/p)
    return norm

但想确保它是正确的。

另外,我想将其推广到更高的维度。这容易处理吗?如果是,达到什么尺寸(和精度?)


交叉发布:https://discuss.pytorch.org/t/how-does-one-compute-the-norm-of-a-function-in-python/91527

【问题讨论】:

  • 对于更高的维度,如果您使用quad,这可能需要更多的计算时间,具体取决于您的功能。如果您想要更快的结果,逻辑上要问的问题是它需要有多准确,不太准确的结果更便宜。
  • @PeterMeisrimel 我认为对我来说最好的方法是给出一个时间限制,然后根据我给出的预算计算积分。或者更好的是,我同时给出预算和准确性,无论哪个首先满足都会停止计算。这在某处可用吗? (当然适用于任何维度)
  • 我对多维数值积分不太了解,但我认为蒙特卡洛类型的方法可能适合这个预算概念。 quad 具有自适应性和确定性,您可以选择公差,这将大致对应于最终的精度。

标签: python numpy numerical-methods numerical-integration


【解决方案1】:

您应该遵循文档字符串中的公式

norm = integrate.quad(lambda x: abs(f1(x) - f2(x))**p, lb, ub)[0]**(1/p)

【讨论】:

  • 应该在**(1/p)之前添加一个[0],因为quad返回一个结果和错误估计的元组。
  • 好的,谢谢。该过程返回值和错误估计,因此确实需要选择元组的第一个组件。
猜你喜欢
  • 2016-03-12
  • 1970-01-01
  • 1970-01-01
  • 2021-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-18
相关资源
最近更新 更多