14

まず、コードの関連部分は次のとおりです。

stokes_list = np.zeros(shape=(numrows,1024)) # 'numrows' defined earlier
for i in range(numrows):
    epoch_name = y['filename'][i] # 'y' is an array from earlier
    os.system('pdv -t {0} > temp.txt '.format(epoch_name)) # 'pdv' is a command from another piece of software - here I copy the output into a temporary file
    stokes_line = np.genfromtxt('temp.txt', usecols=3, dtype=[('stokesI','float')], skip_header=1)
    stokes_list = np.vstack((stokes_line,stokes_line))

したがって、基本的に、コードがループするたびにstokes_line、ファイルから列の1つ(4番目の列)をプルし、毎回temp.txt行を追加する必要がありますstokes_list

たとえば、最初stokes_line

1.1 2.2 3.3  

そして2番目は

4.4 5.5 6.6  

その後stokes_list

1.1 2.2 3.3  
4.4 5.5 6.6  

そして成長し続けるでしょう...

現時点では機能していません。次の行があると思います。

stokes_list = np.vstack((stokes_line,stokes_line))

正しくありません。2つのリストをスタックするだけです-引数が2つしかないので、これは理にかなっています。基本的に、どうやって何度も何度も積み重ねていくのか知りたいです。

どんな助けでも非常にありがたいことに受け取られるでしょう!
必要に応じて、temp.txtファイルの形式の例を次に示します。

File: t091110_065921.SFTC Src: J1903+0925 Nsub: 1 Nch: 1 Npol: 4 Nbin: 1024 RMS: 0.00118753  
0 0 0 0.00148099 -0.00143755 0.000931365 -0.00296775  
0 0 1 0.000647476 -0.000896698 0.000171287 0.00218597  
0 0 2 0.000704697 -0.00052846 -0.000603842 -0.000868739  
0 0 3 0.000773361 -0.00234724 -0.0004112 0.00358033  
0 0 4 0.00101559 -0.000691062 0.000196023 -0.000163109  
0 0 5 -0.000220367 -0.000944024 0.000181002 -0.00268215  
0 0 6 0.000311783 0.00191545 -0.00143816 -0.00213856  
4

2 に答える 2

42

vstack配列全体をコピーするため、何度も行うのは良くありません。

通常の Python を作成しlist.append全体を に渡してnp.vstack、新しい配列を一度作成します。

stokes_list = []
for i in xrange(numrows):
    ...
    stokes_line = ...
    stokes_list.append(stokes_line)

big_stokes = np.vstack(stokes_list)
于 2012-09-06T11:45:36.550 に答える
11

stokes_list知っているので、配列の最終的なサイズはすでにわかっていますnumrows。したがって、配列を大きくする必要はないようです (これは非常に非効率的です)。各反復で正しい行を割り当てるだけです。最後の行を次のように置き換えるだけです。

stokes_list[i] = stokes_line

ところで、あなたの非稼働回線については、次のことを意味していたと思います。

stokes_list = np.vstack((stokes_list, stokes_line))

stokes_list新しい値に置き換える場所。

于 2012-09-06T11:47:59.840 に答える