在多元函数中除以零

时间:2018-11-16 23:35:08

标签: python python-3.x

我试图根据功能n和输入x的顺序定义一个功能。

import numpy as np
#importing our packages

n = np.array([0,1,2])
x = np.arange(0,21,1)

#defining our  functions 


def J(n,x):

    if np.all(n==0) and np.all(x==0): 
        return 0
    else:   
        J0 = np.sin(x)/x
        J0[np.isnan(J0)]=0
        print("First function J0 is",J0)

    if np.all(n==1) and np.all(x==0):
        return 0
    else:
        J1 = np.sin(x)/(x**2)-np.cos(x)/x
        J1[np.isnan(J1)]=0
        print("Second function J1 is",J1)

    #J2
    g = ((3/x**2)-1)
    if np.all(n==2) and np.all(x==0):
        return 0
    else:
        J2 = g*J0-3*np.cos(x)/x**2 
        J2[np.isnan(J2)]=0
        print("Third function J2 is",J2)

我已经设法写完了。

我有一些问题需要您帮助:

  1. 我必须包含Jn[np.isnan(Jn)]=0,因为没有它,我的结果的第一个元素将否则返回nan。 (哪个显示了我的if语句不起作用)

  2. 如何摆脱过多的警告,即“除以零”和“在true_divide中遇到无效值”?我意识到此链接可以回溯到问题1,这是由于我的代码出于某种奇怪的原因仍然被零除。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

通常,一种避免“被零除”警告或错误的有用方法是使用np.divide函数。 您应该指定问题值而不是无穷大-在此示例中为零。

c = np.divide(a, b, out=np.zeros_like(a), where=b!=0)