Skip to main content
 首页 » 编程设计

python之在 true_divide 中遇到被零除 + 在 true_divide 中遇到无效值 + 在 reduce 中遇到无效值

2025年05月04日11think

这是我试图绘制的半 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.0和1.15.4。

请您参考如下方法:

问题可能来自于它是一个矩阵除法,而 python 不能很好地处理它。

尝试替换:

I = (2*h*np.power(c,2))/(np.power(D,2)np.power(l,5)(np.exp(( hc)/(lk*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