python - 绘制图表但存在范围问题
问题描述
这是我绘制图表的代码,但我不理解错误请帮助
import matplotlib.pyplot as plt
import math
l=np.linspace(0,2001,100)
c=3*(10**8)
h=6.626*(10**-34)
K=1.38*(10**-23)
E=[]
for i in range(100,2001):
y=2*(math.pi)*h*(c**2)/((l[i]**5)*math.exp((h*c/l[i]*K*T)-1))
E.append(y)
plt.plot(l,E)
plt.show
这是错误:
y=2*(math.pi)*h*(c**2)/((l[i]**5)*math.exp((h*c/l[i]*K*T)-1))
IndexError: index 100 is out of bounds for axis 0 with size 100
请帮我理解
解决方案
这是因为np.linspace(0,2001,100)
生成了一个范围从 0 到 2001 但只有 100 个点的数组,因此l[100]
超出了范围。
完全不同的语气:您绝对应该尝试矢量化,这是一个由 numpy 数组支持的强大工具,它使代码更易于实现:
import numpy as np
import matplotlib.pyplot as plt
l = np.linspace(0,2001,100)
c = 3*(10**8)
h = 6.626*(10**-34)
K = 1.38*(10**-23)
y = 2*np.pi*h*(c**2) / ( (l**5)*np.exp((h*c/l*K*T)-1) )
plt.plot(l,y)
plt.show()
推荐阅读
- sql - 联合三个或更多表与条件
- apache-spark - pyspark zipWithIndex() 在 2 节点集群中多次运行时给出不同的结果?
- javascript - 将日期保存到数据库时,parameter.value.getTime 不是函数
- django - Django PostgreSQL FTS
- amazon-web-services - 如何在单个 EC2 实例上管理多个 IAM 用户?
- android - 通知/服务 - 无法将位图复制到包裹 blob
- asp.net - 剑道网格保存不会触发
- javascript - 使用 Create React App 制作的非响应式网站 - 在移动设备上显示放大的页面
- javascript - chrome 扩展消息传递:sendResponse 不是函数
- javascript - Draggable 在 extjs6.5 中不起作用