除以true_divide中遇到的零+ true_divide中遇到的无效值+ reduce中遇到的无效值

时间:2019-01-18 13:54:29

标签: python numpy divide-by-zero

以下是我根据温度和距离的变化绘制半Planck law的方法。

import numpy as np

k = 1.381*np.power(10,-23, dtype=np.float)
c = 3*np.power(10,8)
h = 6.626*np.power(10,-34, dtype=np.float)  
l = 3*np.power(10,-6, dtype=np.float)

d_lower = 16*np.power(10,4)
d_upper = 2*np.power(10,6)

t_lower = 740
t_upper = 5200

d = np.arange(d_lower,d_upper,100)
t = np.arange(t_lower,t_upper,10)
D,T = np.meshgrid(d, t)
I = (2*h*np.power(c,2))/(np.power(D,2)*np.power(l,5)*(np.exp((h*c)/(l*k*T))-1))  

解释器返回以下错误:

RuntimeWarning: divide by zero encountered in true_divide
  I = (2*h*np.power(c,2))/(np.power(D,2)*np.power(l,5)*(np.exp((h*c)/(l*k*T))-1))

因为T的值在开尔文中,所以我不应该被零除,所以np.exp((h*c)/(l*k*T))-1不能为零。

这是怎么了?!

我的python和numpy版本分别为3.7.01.15.4

1 个答案:

答案 0 :(得分:-1)

问题可能出在以下事实上:它是矩阵除法,而python处理得不好。

尝试替换:

I =(2 * h * np.power(c,2))/(np.power(D,2) np.power(l,5)(np.exp(( h c)/(l k * T))-1))

作者:

aaa = (2*h*np.power(c,2))
bbb = (np.power(D,2)*np.power(l,5)*(np.exp((h*c)/(l*k*T))-1))  
I = aaa/bbb

对我有用

SLP