2012-09-06 54 views
7

我已經在這個(簡單的)Python代碼上花費了很多年,並且感謝這個論壇,我差不多在那裏。我真的希望有人能夠直接讓我100%的工作!如何使用numpy vstack

首先,這裏是代碼的相關部分:

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拉從文件「TEMP.TXT」列(四之一)之一,我希望它每次都添加一行到'stokes_list'。

例如,如果第一stokes_line

1.1 2.2 3.3 

,第二個是

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 

回答

32

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) 
+0

謝謝 - 這非常有幫助 – user1551817

+4

+1爲「不要把vstack放入循環」。 – mak

8

您現在已經是stokes_list陣列的最終大小,因爲你知道numrows。所以看起來你不需要增長一個數組(這是非常低效的)。您可以簡單地在每次迭代中分配正確的行。 僅僅通過更換你的最後一行:

stokes_list[i] = stokes_line 

順便說一句,你不工作我行認爲你的意思是:

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

在那裏你被它的新值替換stokes_list

+0

這是比我的更好的解決方案,如果'numrows'之前已知(如在這種情況下)。 – eumiro

+0

謝謝!那很棒! – user1551817