Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用一些固定参数在numpy中对函数进行矢量化?_Numpy_Scipy - Fatal编程技术网

如何使用一些固定参数在numpy中对函数进行矢量化?

如何使用一些固定参数在numpy中对函数进行矢量化?,numpy,scipy,Numpy,Scipy,我写了一个用伯恩斯坦多项式逼近函数的代码() 在 我有一个函数,它给出了逼近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是固定的,p通过np生成的向量 因此,我以以下方式对函数进行矢量化:

我写了一个用伯恩斯坦多项式逼近函数的代码()

我有一个函数,它给出了逼近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是固定的,p通过np生成的向量 因此,我以以下方式对函数进行矢量化:

 bernstein3 = lambda x: bernstein(f, 3, x)
 bernstein3 = np.vectorize(bernstein3)
 y3 = bernstein3(x)
 plt.plot(x, y3, 'green', label='$B_3$')

它是有效的。但我想一定有更优雅的,或者更具python风格的方法。有什么建议吗?非常感谢因为SciPy统计函数是矢量化的,您的
bernstein
函数可以以一种简单的方式修改,以实现这一目的:

将numpy导入为np
导入scipy.stats
def伯恩斯坦(f、n、p):
#k值向量
k=np.arange(n+1)
#向p添加广播维度
pd=np.展开尺寸(p,-1)
#计算近似
返回np.sum(f(k/n)*scipy.stats.binom.pmf(k,n,pd),-1)
它的用途很简单,如下所示:

将numpy导入为np
将matplotlib.pyplot作为plt导入
def f(x):
返回np.abs(1/2-x)
x=np.linspace(0,1100)
y=f(x)
plt.绘图(x,y,'blue',label='f(x)'
y_近似值=伯恩斯坦(f,10,x)
plt.绘图(x,y约为“橙色”,标签为“f约为(x)”)
plt.show()

请在问题中发布
bernstein
函数,因为答案取决于它是如何实现的。此外,我认为可以假设
f
首先是一个矢量化函数,否则很难解决这个问题。非常感谢,但我不理解pd=np行。expand\u dims(p,-1)该怎么办?@PabloDeNapoli它在
p
的形状末尾添加了一个额外的维度,因此无论它有什么形状,多项式的计算都会沿着该维度广播(请参见)。然后
np.sum
减少该维度,因此输出具有与输入相同的形状。