簡體   English   中英

我應該如何使用Numpy的vstack方法?

[英]How should I use Numpy's vstack method?

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

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  

vstack一遍又一遍是不好的,因為它會復制整個數組。

創建一個普通的Python list.append np.vstack到它,然后將其整個傳遞給np.vstack一次創建一個新數組。

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

big_stokes = np.vstack(stokes_list)

您已經知道stokes_list數組的最終大小,因為您知道numrows 因此,您似乎不需要增長數組(效率非常低)。 您可以在每次迭代中簡單地分配正確的行。 只需將您的最后一行替換為:

stokes_list[i] = stokes_line

順便說一句,關於您的非工作線,我認為您的意思是:

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

用新值替換stokes_list的位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM