python for 循环用于从 2 个一维数组创建一个二维数组
python for loop for creating a 2D array form 2 1D array
我想使用 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 循环不工作。我在互联网上进行了搜索,但找不到适合此类数学运算的循环参考。
在此先感谢您的帮助。
您至少需要将 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)
我想使用 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 循环不工作。我在互联网上进行了搜索,但找不到适合此类数学运算的循环参考。 在此先感谢您的帮助。
您至少需要将 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)