我试图绘制一个定义如下的函数:
def f(x,y);
if x==y:
return x
else:
return x-y
现在语法上没有任何问题,除了我无法绘制它:
from numpy import mgrid
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
[X,Y] = mgrid[0:1:0,01,0:1:0.01]
fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X,Y,f(X,Y))
这会出现错误:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
这是由于Python试图将布尔函数应用于数组。我尝试用
重写函数if np.equal(x,y)
作为测试,但这也不起作用。我知道我可以手动创建f(X,Y)
值数组“所以可以说各种循环,但我想知道的是:有没有办法定义一个包含布尔条件的函数,哪个可以然后用matplotlib / pyplot轻松绘制?
答案 0 :(得分:1)
在f的定义中,如果你期望x和y可以是数组(它们是数组),你必须做一些不同于"如果x == y:" - 例如"如果全部(x == y):"。
此外,您可能会遇到问题,然后使用[f(x,y)表示x,y表示拉链(X,Y)]。
或地图(f,* zip(* zip(X,Y))),如果你想更加惯用,但不太明显。
编辑:上面我假设你确实希望f接受数组,并且猜测all()可能就是你所需要的。