Variables 创建在for循环中更改大小的变量

Variables 创建在for循环中更改大小的变量,variables,for-loop,idl-programming-language,Variables,For Loop,Idl Programming Language,我必须使用来自两个IDL结构的数据创建一个fits文件。这不是根本问题 我的问题是,首先我必须创建一个包含这两种结构的变量。 为了创建它,我使用了一个for循环,该循环将在每一步写入我的变量的新行。 问题是我无法在下一步添加新行,它会覆盖它,因此在我的fits文件的末尾,我不知道有10000行,它只有一行 这是我也尝试过的 for jj=0,h[1]-1 do begin test[*,jj] = [sme.wave[jj], sme.smod[jj]] print,test endf

我必须使用来自两个IDL结构的数据创建一个fits文件。这不是根本问题

我的问题是,首先我必须创建一个包含这两种结构的变量。 为了创建它,我使用了一个for循环,该循环将在每一步写入我的变量的新行。 问题是我无法在下一步添加新行,它会覆盖它,因此在我的fits文件的末尾,我不知道有10000行,它只有一行

这是我也尝试过的

for jj=0,h[1]-1 do begin

  test[*,jj] = [sme.wave[jj], sme.smod[jj]]
  print,test
endfor
但是,
*
通配符把一切都搞糟了,因为现在在
测试
中,我有了与
jj
对应的数字,而不是
sme.wave
sme.smod
的值

我希望有人能理解我的要求,这可以帮助我! 提前谢谢你

Chiara

假设“sme.wave”和“sme.smod”结构字段包含的一维数组的元素数与“test”中的行数相同,那么代码应该可以工作。例如,我尝试了这个,得到了以下输出:

IDL> test = intarr(2, 10)  ; all zeros
IDL> sme = {wave:indgen(10), smod:indgen(10)*2}
IDL> for jj=0, 9 do test[*,jj] = [sme.wave[jj], sme.smod[jj]]
IDL> print, test
       0       0
       1       2
       2       4
       3       6
       4       8
       5      10
       6      12
       7      14
       8      16
       9      18
但是,为了更好地优化速度,您应该执行以下操作,并利用IDL的多线程阵列操作。循环通常比以下情况慢得多:

IDL> test = intarr(2, 10)  ; all zeros
IDL> sme = {wave:indgen(10), smod:indgen(10)*2}
IDL> test[0,*] = sme.wave
IDL> test[1,*] = sme.smod
IDL> print, test
   0       0
   1       2
   2       4
   3       6
   4       8
   5      10
   6      12
   7      14
   8      16
   9      18
此外,如果您事先不知道“test”的大小,并且希望附加到变量,即添加一行,则可以执行以下操作:

IDL> test = []
IDL> sme = {wave:Indgen(10), smod:Indgen(10)*2}
IDL> for jj=0, 9 do test = [[test], [sme.wave[jj], sme.smod[jj]]]
IDL> Print, test
   0       0
   1       2
   2       4
   3       6
   4       8
   5      10
   6      12
   7      14
   8      16
   9      18