0

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

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

这也是我尝试过的

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

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

但是*通配符搞砸了一切,因为现在里面test我有对应的数字jj,而不是sme.waveand的值sme.smod

我希望有人能理解我的要求,这可以帮助我!先感谢您!

基亚拉

4

1 回答 1

0

假设您的“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
于 2013-09-06T16:23:48.220 回答