我需要做一个三维绘图,条件是在网格区域中(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()
但是这个条件有点错误,所以我得到:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
请,帮我把这个有条件的工作
您的错误来自这样一个事实:您将数组(由
(x-(M/2))**2+(y-(N/2))**2
与标量值r = 1225
进行比较的结果)这个结果是一个布尔值数组,不能按原样用作条件(参见this answer)
按照@ImportanceOfBeingErnest的建议,在这种情况下应该使用^{}
相关问题 更多 >
编程相关推荐