python:在 true_divide 中遇到无效值 - 但是在哪里?
python: invalid value encountered in true_divide - but where?
我对以下问题有疑问:
我想绘制以下简单函数:
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 函数,returns x_1=x_2=0 值为真。这似乎有效。
有人知道这个警告是从哪里来的吗?
如前所述,您将使用 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()
我对以下问题有疑问:
我想绘制以下简单函数:
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 函数,returns x_1=x_2=0 值为真。这似乎有效。
有人知道这个警告是从哪里来的吗?
如前所述,您将使用 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()