我花了很多时间在这个(简单的)Python代码上,感谢这个论坛,我几乎就在那里.我真的希望有人可以让我直接让它100%工作!
首先,这是代码的相关部分:
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))
Run Code Online (Sandbox Code Playgroud)
所以基本上,每次代码循环时,stokes_line从文件'temp.txt'中拉出其中一列(第4个),我希望每次都向'stokes_list'添加一行.
例如,如果第一个stokes_line是
1.1 2.2 3.3
Run Code Online (Sandbox Code Playgroud)
第二是
4.4 5.5 6.6
Run Code Online (Sandbox Code Playgroud)
然后temp.txt会
1.1 2.2 3.3
4.4 5.5 6.6
Run Code Online (Sandbox Code Playgroud)
并将继续增长......
它现在不工作,因为我认为这条线:
stokes_list = np.vstack((stokes_line,stokes_line))
Run Code Online (Sandbox Code Playgroud)
是不正确的.它只堆叠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
Run Code Online (Sandbox Code Playgroud)
eum*_*iro 41
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)
Run Code Online (Sandbox Code Playgroud)
Nic*_*bey 10
你知道,你已经知道了stokes_list数组的最终大小numrows.所以看起来你不需要增长一个数组(这是非常低效的).您可以在每次迭代时简单地分配正确的行.只需将您的最后一行替换为:
stokes_list[i] = stokes_line
Run Code Online (Sandbox Code Playgroud)
顺便说一句,关于你的非工作线,我认为你的意思是:
stokes_list = np.vstack((stokes_list, stokes_line))
Run Code Online (Sandbox Code Playgroud)
你用stokes_list新的价值取代的地方.
| 归档时间: |
|
| 查看次数: |
38906 次 |
| 最近记录: |