我想用python来获得不同温度下的振动分区功能。我有两个一维数组,如:freq=[100,150,200]
(这实际上是从.dat文件中读取)和Temp=np.arange(273.,973.,25)
。
现在,qvib =特定温度(1/1-exp(-h*nu/kb/T))
的产品超过频率。我的for循环是:
for i in range(len(T)):
for j in range(len(freq)):
q[i][j]=1/(1-np.exp(-h*freq[j]/kb/T[i]))
Q[i]=np.prod(q[i][:])
我只使用python两到三天。我甚至都不知道python的所有在线操作。我有两个问题: 1)我可以不使用for循环(比如只使用sum或no.prod) 2)我的for循环不起作用。我在互联网上搜索但是对于这种类型的数学运算没有找到任何有益的循环参考。 提前感谢您的帮助。
答案 0 :(得分:3)
您需要至少将Q
定义为与数组温度相同的空数组,然后再分配给它:
Q = np.empty(len(T))
更好的是:
for i in range(len(T)):
q = 1/(1-np.exp(-h*freq/kb/T[i]))
Q = np.prod(q)
但NumPy真正的好处是能够完全取消Python循环:
Q = np.prod(1/(1-np.exp(-h*freq[:, None]/kb/T)), axis=0)