3

2 番目の列の特定の行をプロットするデータ ファイルがあります。私のスクリプトは次のとおりです。

f=open('datafile','r')
lines1=f.readlines()[4:24]#since I want the values from the 4th to the 23rd line
lines2=f.readlines()[33:54]#I want the values from the 33rd to the 53rd line
f.close()

x1=[]
y1=[]

for line in lines1:
    p=line.split()
    x1.append(float(p[1]))#the values are in the second column
for line in line2:
    p=line.split()
    y1.append(float(p[1]))

xv=np.array(x1)
yv=np.array(y1)

plt.plot(xv,yv)

しかし、最後に「x と y は最初の次元が同じでなければならない」というエラーが表示されます。私はPythonの経験があまりありません.誰かが私に何か別の方法をアドバイスしたり、何が間違っているのか教えてもらえますか? 別の方法でそれらの行のみを抽出するにはどうすればよいですか?

行 4 から行 25 までの x= 列 2 を、行 33 から行 54 までの y= 列 2 に対してプロットしたいと思います。

事前にどうもありがとうございました。

よろしく、

ジオ

4

2 に答える 2

3

あなたが間違っているのは、 readlines2回呼び出すことです。

ファイル オブジェクトはiteratorのように動作します。呼び出すreadlines使い果たされます。2 番目の呼び出しは、空のリストを返します。

行のリストを一度取得してから、それを操作できます。

lines = f.readlines()
lines1 = lines[4:24]
lines2 = lines[33:54]

それでも、リストの長さが 1 ずつ異なるようです。それを修正する必要があると思います。

numpyリストをプロットするためにリストを配列に変換する必要がないことにも注意してください。

于 2012-12-06T16:21:17.930 に答える
1

これは、 numpy.genfromtxtと python スライスで解決できます。

import numpy as np
import matplotlib.pyplot as plt

x_start, x_end = 4, 25 # get values from the 4th to the 25rd line
y_start, y_end = 33, 54 # get values from the 33rd to the 54rd line

x = np.genfromtxt('datafile', usecols=(1))
y = np.genfromtxt('datafile', usecols=(1))

x = x[x_start - 1:x_end]
y = y[y_start - 1:y_end]

print ' x=', x, '\n\n y=', y

plt.plot(x, y)
plt.show()
于 2012-12-06T16:50:29.617 に答える