Деление на 0 в питоне? - PullRequest
0 голосов
/ 15 марта 2019

Я использую Python2.7, чтобы создать простое векторное поле и затем построить его ...

Но Jupyter жалуется на деление на 0 («RuntimeWarning: деление на ноль, встречающееся в делении»), и я не могу его найти.

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')

Есть намеки на это?

1 Ответ

1 голос
/ 15 марта 2019

Не обманывайте себя, думайте, np.where делает всю работу здесь. Python по-прежнему будет сначала оценивать все входные аргументы, прежде чем запускать вызов np.where.

Таким образом, в вашей команде kmod = np.where( dist>0.00001, q_cons / dist, 0 ) Python оценит dist>0.00001 (нормально) и q_cons / dist (плохо!) Перед запуском np.where.

Попробуйте взамен np.divide . Я думаю, вы хотите что-то вроде этого:

np.divide(q_cons, dist, where=dist>0.00001 )
...