-6

(2列のデータ)のようなデータを含むファイル(Data.txt)があります

0.105785959943        9.75133617601e+15
0.111906693211        9.03309900398e+15
0.118381569654        9.10020956844e+15
0.125231079854        9.92284743442e+15
0.132476899971        8.90313525209e+15
0.140141960337        8.94055824107e+15
0.148250518026        9.26206609674e+15
0.156828233614        8.91802025262e+15

ファイルには 100 行が含まれる場合があります。r_i最初の列の値を、2 番目の列の値をd_i(からにi変更される場合があります)と呼びましょう。私の問題は、 を計算するコードを書くことです 。ここで、 は定数です。0100C*(r_(i+1)-r_i)^3 * d_iC

また、これらのデータを 3 列を含む新しいファイルに書き込みたいと思います。3 列目は新しい計算データにする必要があります。

どうすればこれを達成できますか?この問題を解決する方法を知っている体はありますか?

4

4 に答える 4

0

Python でファイルを読み取るには、こちらをご覧ください。ファイルへの出力の書き込みについては、こちらをご覧ください。

于 2013-08-30T15:17:56.187 に答える
0

5 人が私の質問に反対票を投じましたが、私は問題を解決する方法を見つけました。これが私が使用したコードです。Pythonで書かれています。

enter codefrom numpy import *
from math import *
import operator

f = open('Data_Genergy_26.txt', 'r')
lines = f.readlines()
# initialize some variable to be lists:
r = []
ro = []
E =[]

# scan the rows of the file stored in lines, and put the values into some variables:
for line in lines:
    p = line.split()
    r.append(float(p[0]))
    ro.append(float(p[1]))
#Subtracting the current and previous item in a list
def foo(it):
    it = iter(it)
    t = it.next()
    for s in it:
        yield t, s
        t = s        
list(foo(r))
E=[x[1] - x[0] for x in foo(r)]
#print E
#Cubing all elements in a list
def cube(E):
    return [i ** 3 for i in E]
#print cube(E)
#computing total energy
z =[a*b for a,b in zip(cube(E),ro)]
z[:] = [x*4/3*pi for x in z] 
z.append(0.0) #for making r, ro, and z of same dimension
#print z     

DataOut = column_stack((r,ro,z))
savetxt('output.dat', DataOut)

これを実装するためのより良い方法があれば、私に知らせてください。ありがとう

于 2013-08-31T08:58:49.840 に答える
0
#include <iostream>

int main(int, char*[]) {
  const double C = 1;
  double rp, dp;
  double r, d;

  std::cin >> rp >> dp;
  while (std::cin.good()) {
    std::cin >> r >> d;
    if (std::cin.good()) {
      double t = r - rp;
      double v = C * t * t * t * dp;
      std::cout << rp << " " << dp << " " << v << std::endl;
      rp = r; dp = d;
    }
  }
  std::cout << rp << " " << dp << " " << 0 << std::endl;

  return 0;
}
于 2013-08-30T15:19:52.827 に答える
0

awk は、このタイプの計算に最適です。

awk -v c="$c" '{if (s) print o, c*($1-r)^3*d;o=$0;r=$1;d=$2;s=1}' file

ここで、c はシェル変数です

于 2013-08-30T16:19:23.507 に答える