使用if语句的meshgrid和用户定义函数的模糊真值

时间:2015-03-19 15:31:23

标签: python matplotlib

让我们假设我的函数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()

1 个答案:

答案 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