在Python中绘制3D条件函数

在Python中绘制3D条件函数,python,if-statement,matplotlib,Python,If Statement,Matplotlib,我需要做一个3D绘图,条件是在网格区域中(x-(M/2))^2+(y-(N/2))^2

我需要做一个3D绘图,条件是在网格区域中(x-(M/2))^2+(y-(N/2))^2
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

M=70
N=70
r=(N/2)**2

def f(x, y):
    if (x-(M/2))**2+(y-(N/2))**2<r:
        return (x-(M/2))**2/122.5+(y-(N/2))**2/122.5
    return 10.0

x = np.linspace(0, 70, M)
y = np.linspace(0, 70, N)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)

fig = plt.figure()
ax = plt.axes(projection='3d')
ax.contour3D(X, Y, Z, 50, cmap='binary')
plt.show()
将numpy导入为np
将matplotlib.pyplot作为plt导入
从mpl_toolkits.mplot3d导入Axes3D
M=70
N=70
r=(N/2)**2
定义f(x,y):

如果(x-(M/2))**2+(y-(N/2))**2您的错误来自于将数组(x-(M/2))**2+(y-(N/2))**2与标量值
r=1225
进行比较的事实

此结果是一个布尔值数组,不能作为条件使用(请参阅)

按照@ImportanceOfBeingErnest的建议,在这种情况下应该使用

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

M=70
N=70
r=(N/2)**2

def f(x, y):
    computed = (x-(M/2))**2+(y-(N/2))**2
    return np.where(computed < r, r / 122.5, 10.0)

x = np.linspace(0, 70, M)
y = np.linspace(0, 70, N)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)

fig = plt.figure()
ax = plt.axes(projection='3d')
ax.contour3D(X, Y, Z, 50, cmap='binary')
plt.show()
将numpy导入为np
将matplotlib.pyplot作为plt导入
从mpl_toolkits.mplot3d导入Axes3D
M=70
N=70
r=(N/2)**2
定义f(x,y):
计算=(x-(M/2))**2+(y-(N/2))**2
返回np.其中(计算值
[1,5,0]
大于或小于
3
?请阅读
numpy.where