Python程序从第二列的值计算表达式(方程式)

时间:2018-05-28 05:34:00

标签: python equation

我的价值观为:

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)我可以直接拿第二列并插入/放入等式来计算吗?

我该怎么做?从这里开始,我将第二列写入一个输出文件,然后再从该输出文件中写出等式。

非常感谢任何建议。

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]

相比,这是一种更好的做法