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)