[英]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.