创建一个在for循环中改变大小的变量

时间:2013-05-16 15:51:38

标签: variables for-loop idl-programming-language

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

我的问题是首先我必须创建一个包含两个结构的变量。 为了创建这个,我使用了一个for循环,它将在每一步写入我的变量的新行。 问题是我无法在下一步添加新行,它会覆盖它,所以最后我的拟合文件而不是,我不知道,10000行,它只有一行。

这也是我试过的

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

  test[*,jj] = [sme.wave[jj], sme.smod[jj]]
  print,test
endfor

*通配符搞乱了所有内容,因为现在在test内我的号码与jj相对应,而不是sme.wavesme.smod的值

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

Chiara的

1 个答案:

答案 0 :(得分:0)

假设你的“sme.wave”和“sme.smod”结构字段包含1-D数组,其元素数与“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