在 python 广播中除以 0?
Division by 0 in python broadcasting?
我正在使用 Python2.7 创建一个简单的向量场,然后绘制它...
但是 Jupyter 抱怨除以 0 ("RuntimeWarning: divide by zero encountered in divide"),我找不到它。
import numpy as np
def field_gen(x0, y0, x, y, q_cons = 1):
dx = x0-x
dy = y0-y
dist = np.sqrt(np.square(dx)+np.square(dy))
kmod = np.where( dist>0.00001, q_cons / dist, 0 )
kdir = np.where( kmod != 0, (np.arctan2(-dy,-dx) * 180 / np.pi), 0)
res_X = np.where( kmod !=0, kmod * (np.cos(kdir)) , 0 )
res_Y = np.where( kmod !=0, kmod * (np.sin(kdir)) , 0 )
return (res_X, res_Y)
n = 10
X, Y = np.mgrid[0:n, 0:n]
x0=2
y0=2
(u,v)= field_gen(x0, y0, X, Y)
#print(u) #debug
#print
#print(v)
plt.figure()
plt.quiver(X, Y, u, v, units='width')
有什么提示吗?
不要误以为 np.where
在这里完成了所有工作。在 运行 调用 np.where
.
之前,Python 仍将首先评估所有输入参数
因此在您的命令 kmod = np.where( dist>0.00001, q_cons / dist, 0 )
中,Python 将在 运行 [=11= 之前评估 dist>0.00001
(好)和 q_cons / dist
(坏!) ].
试试 np.divide。我想你想要这样的东西:
np.divide(q_cons, dist, where=dist>0.00001 )
我正在使用 Python2.7 创建一个简单的向量场,然后绘制它...
但是 Jupyter 抱怨除以 0 ("RuntimeWarning: divide by zero encountered in divide"),我找不到它。
import numpy as np
def field_gen(x0, y0, x, y, q_cons = 1):
dx = x0-x
dy = y0-y
dist = np.sqrt(np.square(dx)+np.square(dy))
kmod = np.where( dist>0.00001, q_cons / dist, 0 )
kdir = np.where( kmod != 0, (np.arctan2(-dy,-dx) * 180 / np.pi), 0)
res_X = np.where( kmod !=0, kmod * (np.cos(kdir)) , 0 )
res_Y = np.where( kmod !=0, kmod * (np.sin(kdir)) , 0 )
return (res_X, res_Y)
n = 10
X, Y = np.mgrid[0:n, 0:n]
x0=2
y0=2
(u,v)= field_gen(x0, y0, X, Y)
#print(u) #debug
#print
#print(v)
plt.figure()
plt.quiver(X, Y, u, v, units='width')
有什么提示吗?
不要误以为 np.where
在这里完成了所有工作。在 运行 调用 np.where
.
因此在您的命令 kmod = np.where( dist>0.00001, q_cons / dist, 0 )
中,Python 将在 运行 [=11= 之前评估 dist>0.00001
(好)和 q_cons / dist
(坏!) ].
试试 np.divide。我想你想要这样的东西:
np.divide(q_cons, dist, where=dist>0.00001 )