2

私は以下のコードでテキストファイルから読んでいます:

import numpy as np
my_data = np.genfromtxt(resultsDirectory+'/Points.txt', delimiter=' ')
PointX = my_data[:,5]
PointY = my_data[:,11]

私の入力ファイルは通常このようなものです-

ParamA : 0 ParamB : 7 ParamC : 0 ParamD : 1 Result : FAIL Time : 0 Epsilon : 0.5
ParamA : 0 ParamB : 11 ParamC : 0 ParamD : 1 Result : FAIL Time : 2 Epsilon : 0.5
ParamA : 0 ParamB : 7 ParamC : 0 ParamD : 3 Result : FAIL Time : 2 Epsilon : 0.25
ParamA : 0 ParamB : 13 ParamC : 0 ParamD : 1 Result : FAIL Time : 7 Epsilon : 0.25
ParamA : 0 ParamB : 7 ParamC : 0 ParamD : 4 Result : FAIL Time : 8 Epsilon : 0.125
ParamA : 0 ParamB : 8 ParamC : 0 ParamD : 2 Result : FAIL Time : 1 Epsilon : 0.125
ParamA : 0 ParamB : 8 ParamC : 0 ParamD : 3 Result : FAIL Time : 3 Epsilon : 0.125
ParamA : 0 ParamB : 8 ParamC : 0 ParamD : 4 Result : FAIL Time : 6 Epsilon : 0.125
ParamA : 0 ParamB : 9 ParamC : 0 ParamD : 2 Result : FAIL Time : 6 Epsilon : 0.125
ParamA : 0 ParamB : 10 ParamC : 0 ParamD : 2 Result : FAIL Time : 5 Epsilon : 0.125
ParamA : 0 ParamB : 14 ParamC : 0 ParamD : 1 Result : FAIL Time : 6 Epsilon : 0.125

これからPointXを抽出すると、

PointX = [7 11 7 13 7 8 8 8 9 10 14]
PointY = [1 1 3 1 4 2 3 4 2 2 1]

今、私のテキストファイルには1行しか含まれていないか、空でさえあることがあります。

たとえば、テキストファイルに1行しかない場合、my_data配列は次のようになります-

[  nan   nan   0.    nan   nan   7.    nan   nan   0.    nan   nan   1.
   nan   nan   nan   nan   nan  0.    nan   nan   0.5]

この場合、をmy_data.shape返します(21,)

ただし、配列を読み取るPointXPointY、としてエラーが発生しIndexError: invalid indexます。欲しかったPointX=[7]PointY=[1]。または、テキストファイルが空の場合は、とである必要がPointX=[]ありPointY=[]ます。

この問題をどの程度正確に解決する必要がありますか?また、それに依存するコードを壊さないために、 PointXandが配列である必要があります。PointY

ありがとうございました。

4

2 に答える 2

3

残念ながら、genfromtxt1行しかないファイルを指定すると1D配列を返し、複数行を指定すると2D配列を返します。形状を変更することで、不一致を処理できます。

import numpy as np
my_data = np.genfromtxt('data', delimiter=' ')
if my_data.ndim == 1:
    my_data = my_data.reshape(1, -1)
PointX = my_data[:,5]
PointY = my_data[:,11]
print(PointX)
print(PointY)

収量

[ 7.]
[ 1.]
于 2012-10-11T16:12:55.713 に答える
2

空のファイルを処理するには:

import numpy as np
try:
    my_data = np.genfromtxt('data_file', delimiter=' ')
    if my_data.ndim == 1:
        my_data = my_data.reshape(1, -1)
    PointX = my_data[:,5]
    PointY = my_data[:,11]
except IOError: # File is empty
    PointX = []
    PointY = []

print(PointX)
print(PointY)
于 2012-10-11T16:28:08.903 に答える