我的价值观为:
0.263 0
0.265 0
0.267 0
0.269 0.0001
0.271 0.0003
0.273 0.0006
0.275 0.0011
0.277 0.0021
0.279 0.0029
0.281 0.0046
0.283 0.0072
0.285 0.0113
我想计算表达式,即。PMF(W_r)= k_b T ln g(r)
。其中g(r)
是第二列的值。
以下是我尝试过的代码:
import numpy as np
#import panda as pd
import scipy.constants as sc
#from astropy import constants as const
import matplotlib.pyplot as plt
import math
A=open('rdf_CaOw.dat','r')
B=open('pmf.dat','w')
for column in A:
c=column.strip().split()
B.write(column[6:11]+'\n')
B.close()
A.close()
C=open('pmf.dat', 'r')
D=open('pmf1.dat','w')
for line in C:
W = (- float(sc.Boltzmann * 298 * float (math.log (C))))
print (W)
1)对此有何建议?
2)我可以直接拿第二列并插入/放入等式来计算吗?
我该怎么做?从这里开始,我将第二列写入一个输出文件,然后再从该输出文件中写出等式。
非常感谢任何建议。
答案 0 :(得分:1)
你可以直接采取第二栏
with open('rdf.dat') as f:
for line in f:
cols = [float(x) for x in line.split()]
print (cols[1])
输出
0.0
0.0
0.0
0.0001
0.0003
0.0006
0.0011
0.0021
0.0029
0.0046
0.0072
0.0113
您现在可以将它用于进一步的数学运算。
答案 1 :(得分:0)
2)我可以直接取第二列并插入/放入等式来计算吗?
是的,您的文件(pmf.dat)充当变量,完全没必要。
首先关闭:
for column in A:
该行按行迭代文件,因此row
可能是更好的变量名。你想要第二列的值?然后row[1]
就是您所需要的。
您可以使用for循环:
C = []
for row in A:
C.append(row.split()[1])
或者更好,您可以使用列表理解。
C = [row.split()[1] for row in open('rdf_CaOw.dat','r')]
瓦拉!你有它。
C = [0, 0, 0, 0.0001, 0.0003, 0.0006, 0.0011, 0.0021, 0.0029, 0.0046, 0.0072, 0.0113]
您似乎也试图获得最后5个值。
C[-5:] gives [0.0021, 0.0029, 0.0046, 0.0072, 0.0113]
我相信与C[6:11]