numpy - 如何使用一些固定参数对 numpy 中的函数进行矢量化?
问题描述
我已经编写了一个用 Bernstein 多项式逼近函数的代码(https://en.wikipedia.org/wiki/Bernstein_polynomial)
在
https://github.com/pdenapo/metodos-numericos/blob/master/python/bernstein.py
我有一个函数,它将多项式逼近 f 为 bernstein(f, n, p) (其中 f 是我想要近似的函数, n 是度数, p 是评估它的点。
def bernstein(f, n, p):return np.sum(
[f(k / n) * st.binom.pmf(k, n, p) for k in np.arange(0, n + 1)])
现在我想生成这个函数的图,其中 f 和 n es 固定,并且 p 通过 np.arrange 生成的向量运行所以我以以下方式对函数进行向量化:
bernstein3 = lambda x: bernstein(f, 3, x)
bernstein3 = np.vectorize(bernstein3)
y3 = bernstein3(x)
plt.plot(x, y3, 'green', label='$B_3$')
有用。但我想一定有一些更优雅,或者更 Pythonic 的方式来做到这一点。有什么建议么?非常感谢
解决方案
由于 SciPy 统计函数是矢量化的,bernstein
因此可以以直接的方式修改函数以使其工作:
import numpy as np
import scipy.stats
def bernstein(f, n, p):
# Vector of k values
k = np.arange(n + 1)
# Add a broadcasting dimension to p
pd = np.expand_dims(p, -1)
# Compute approximation
return np.sum(f(k / n) * scipy.stats.binom.pmf(k, n, pd), -1)
它将被简单地用作:
import numpy as np
import matplotlib.pyplot as plt
def f(x):
return np.abs(1 / 2 - x)
x = np.linspace(0, 1, 100)
y = f(x)
plt.plot(x, y, 'blue', label='f(x)')
y_approx = bernstein(f, 10, x)
plt.plot(x, y_approx, 'orange', label='f_approx(x)')
plt.show()
推荐阅读
- azure-iot-hub - 如何使用带有 C SDK 的 X.509 CA 将下游 IoT 设备连接到 IoT 中心
- javascript - nodejs解构变量返回未定义
- python - 根据特定列对 numpy-array 进行排序
- excel - 为什么生成范围为错误的 Excel 公式?
- cgal - CGAL 示例无法读取输入文件?
- azure-devops - DevOps 不会在等待部署前批准的情况下取消发布
- sql - 如何将日期分类为月份,并将它们各自的数字分别分类为正数和负数?
- azure-devops - 如何授予利益相关者对 Repos 的读取权限?
- r - 如何获取另一列R的每个级别的列最大值的索引
- swift - 可编码的自定义枚举类型