python - 当我遍历列表中的每个元素时,我得到一个包含“nan”元素的列表,为什么?
问题描述
我试图通过使用 for 循环遍历列表中的每个元素来将列表中的每个元素相乘。这是我的代码:
from __future__ import division
import numpy as np
import matplotlib.pyplot as plt
data = np.genfromtxt('spec.txt') #Reading in the text file
frequency_data = data[:,0]
h = 6.626e-27 #Planck constant in erg s
c = 2.998e10 #speed of light (in vacuum) in cm/s
k = 1.381e-16
def Bv(v,T):
k1 = (2.0*h)/(c**2)
x2 = (h*v)/(k*T)
return k1*((v**3)/(np.exp(x2) -1))
我试图遍历列表
Bv(frequency_data, 2.275)中的每个元素。
BB_v = []
for k in range(len(frequency_data)):
c = Bv(frequency_data, 2.275)[k]*10**17
BB_v.append(c)
print(BB_v)
输出:
[0.0, inf, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan]
/opt/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:7: RuntimeWarning: divide
by zero encountered in true_divide
import sys/opt/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:6:RuntimeWarning:
divide by zero encountered in double_scalars
但我得到了一个包含“nan”元素的列表。为什么我会得到一个包含“nan”元素的列表?
解决方案
这与迭代无关,因为我们可以只用一个值重现问题。
由于机器精度,x2 的值非常接近于零,导致分母 np.exp(x2)-1 在数值上等于零:
def Bv(v,T):
k1 = (2.0*h)/(c**2)
x2 = (h*v)/(k*T)
print("x2={}".format(x2))
return k1*((v**3)/(np.exp(x2) -1))
print(Bv(1., 2.275))
给出结果:
x2=4.160753532182104e-28
nan
/snap/jupyter/6/lib/python3.7/site-packages/ipykernel_launcher.py:5: RuntimeWarning: divide by zero encountered in double_scalars
为避免这种情况,您应该重写 Bv 中分数的公式,使其在数值上与 x2 的小值兼容。例如,您可以在零附近进行泰勒展开:
当 x 趋于零时,np.exp(x) 趋于 1+x
所以 np.exp(x)-1 应该倾向于 x
推荐阅读
- scala - 如何使用 twitter4s 从停止的流中获取推文
- python - 在 streamlit 中整齐地显示分组/多索引 Pandas 数据帧
- spring-boot - org.springframework.beans.factory.BeanCreationException on Spring Boot 从 1.5 版升级到 2.1 版
- php - 域名的全文搜索,.(点)被视为一个空格或发生了什么?
- javascript - 两个数组中最接近的值的集合
- django - django-environ 和 python-decouple 之间的区别?
- tuples - 在 CPLEX OPL 中检索由“元组”组成的 Dvar 的降低成本
- angular - Angular 测试如何模拟 ActivatedRoute 数据
- c# - 使用 openXML 导出的 DataTable 未在 Excel 中排序
- python - 使用 python 读取和更新 git 配置?