python:在true_divide中遇到无效值-但在哪里?

python:在true_divide中遇到无效值-但在哪里?,python,numpy,scientific-computing,Python,Numpy,Scientific Computing,我有一个关于以下问题的问题: 我想绘制以下简单函数: f(x)=x_1*x_2/(x_1^2+x_2^2) 如果x&y为零,您将除以零,因此我添加了一个异常以防止出现这种情况: import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D def f(x1, x2): return np.where(np.logical_and(x1==0,x2==0),

我有一个关于以下问题的问题:

我想绘制以下简单函数:

f(x)=x_1*x_2/(x_1^2+x_2^2)

如果x&y为零,您将除以零,因此我添加了一个异常以防止出现这种情况:

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

def f(x1, x2):
    return np.where(np.logical_and(x1==0,x2==0),
                    0,
                    x1*x2/(x1*x1+x2*x2))

n = 3 
x = y = np.linspace(-5,5,n)
xv, yv = np.meshgrid(x, y)
z = f(xv,yv)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(xv,yv,z)
plt.show()
我的数字是绘图,如果我检查我的解决方案,它似乎也是正确的。但是,如果我运行代码,我会得到一个除法错误:

RuntimeWarning: invalid value encountered in true_divide
我已经手动测试了np.where函数,它返回的x_1=x_2=0值为true。这似乎奏效了


有人知道这个警告来自哪里吗?

正如前面所指出的,您将使用
np.where()
评估每个案例。要避免错误,只需在较低级别对其进行编码,如

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

def f(x1, x2):
    shape = np.shape(x1) 
    y = np.zeros(shape)
    for i in range(0,shape[0]):
        for j in range(0,shape[1]):
            if x1[i,j]!=0 and x2[i,j]!=0:
                y[i,j] = x1[i,j]*x2[i,j]/(x1[i,j]*x1[i,j]+x2[i,j]*x2[i,j])
    return y

n = 3 
x = y = np.linspace(-5,5,n)
xv, yv = np.meshgrid(x, y)
z = f(xv,yv)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(xv,yv,z)
plt.show()

我无法复制它。您的代码对我来说运行良好,并绘制了一个图形。对
np的参数都进行了计算,其中()
,因此这样使用不会消除错误。@WarrenWeckesser如果我理解正确,“x1*x2/(x1*x1+x2*x2)”也会对x1=x2=0进行计算。你知道比np.where()更好的方法来解决这个问题吗?