如何使用自定义函数创建等高线图



我在网上看到了很多创建等高线图的例子,如下

import numpy as np
xlist = np.linspace(-3.0, 3.0, 3)
ylist = np.linspace(-3.0, 3.0, 4)
X, Y = np.meshgrid(xlist, ylist)
Z = np.sqrt(X**2 + Y**2)
cp = plt.contourf(X, Y, Z)
plt.colorbar(cp)
ax.set_title('Contour Plot')
ax.set_xlabel('x (cm)')
ax.set_ylabel('y (cm)')
plt.show()

现在,这是非常简单的,因为numpy中的sqrt函数将愉快地接受meshgrid输入并对所有感兴趣的点进行评估。然而,我不明白的是,如果我有自己的功能,我会怎么做。例如,我有一个更复杂的函数lambda nllh x1,x2 : my_function(x1,x2),它可以是任意复杂的,但需要两个标量,并且它本身返回一个标量。

当我试图用我的函数以相同的方式实现这一点时(即,除了Z=nllh(X,Y)行之外,与上面的代码相同(,我得到了一个错误,即输入数组维度没有任何意义,因为这个函数并不是为了将网格作为输入而设计的。我如何纠正这个问题,或者让python理解函数Z=nllh(X,Y)需要在网格值对上独立求值,而不是在网格本身上求值?

感谢

Tadhg McDonald Jensen在评论中回答。使用np.vectorize(nllh)创建新功能

最新更新