让我们假设我的函数f(x,y)
足够平滑。然而,一些价值只存在于极限的意义上。以此为例sin(x)/ x
x=0
的值仅存在于限制x - >中0。
在一般情况下,我使用if
语句处理此问题。
如果我在meshgrid
的情节中使用此功能,则会收到错误消息:
ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()
我是否真的需要运行两个for
循环来填充z-array,或者有没有办法使用meshgrid
?
最小的工作示例:
import matplotlib.pyplot as plt
import numpy as np
def test(x,y):
a=1.0/(1+x*x)
if y==0:
b=1
else:
b=np.sin(y)/y
return(a * b)
if __name__=='__main__':
X = linspace(-5, 5, 100)
Y = linspace(-5, 5, 100)
X,Y = meshgrid(X, Y)
Z =test(X,Y)
fig = plt.figure(figsize=(8,6))
ax = fig.add_subplot(1,1,1, projection='3d')
ax.plot_surface(X, Y, Z, rstride=8, cstride=8, alpha=0.25)
plt.show()
答案 0 :(得分:1)
要仅为Numpy数组的某些元素赋值,您只需使用索引
即可import numpy as np
def test(x, y):
a = 1.0/(1+x*x)
b = np.ones(y.shape)
mask = (y!=0)
b[mask] = np.sin(y[mask])/y[mask]
return a*b