首先,这是代码的相关部分:
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
中拉出其中一列(第4个),我希望它向{{1}添加一行} 每一次。
例如,如果第一个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
不正确。它只堆叠2个列表 - 这是有意义的,因为我只有2个参数。我基本上想知道我是如何一次又一次地堆叠的。
非常感谢任何帮助! 如果需要,以下是temp.txt文件格式的示例:
stokes_list = np.vstack((stokes_line,stokes_line))
答案 0 :(得分:40)
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)
答案 1 :(得分:8)
您已经知道stokes_list
数组的最终大小,因为您知道numrows
。所以看起来你不需要增长一个数组(这是非常低效的)。您可以在每次迭代时简单地分配正确的行。
只需通过以下方式替换您的最后一行:
stokes_list[i] = stokes_line
顺便说一句,关于你的非工作线,我认为你的意思是:
stokes_list = np.vstack((stokes_list, stokes_line))
您要将stokes_list
替换为新值。