Программа на Python для вычисления выражения (уравнения) по значениям второго столбца - PullRequest
0 голосов
/ 28 мая 2018

У меня есть значения как:

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 голосов
/ 28 мая 2018

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')]

Walla!Вот оно у вас.

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]

0 голосов
/ 28 мая 2018

Вы можете взять прямо второй столбец

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

Вы можете использовать его сейчас для дальнейшей математики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...