2013-05-16 66 views
0

我必须使用来自两个IDL结构的数据创建一个适合文件。这不是基本问题。创建一个变量,在for循环中更改大小

我的问题是,首先我必须创建一个包含两个结构的变量。 为了创建这个,我使用了一个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的

回答

0

假设你“sme.wave”和“sme.smod”结构域包含具有相同数量的元素1-d数组作为有在“测试”行,那么您的代码应该工作。例如,我想这一点,得到了以下的输出:

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 

此外,如果你不知道什么是“测试”的大小是时间提前,并且要附加的变量,即加排,那么你可以这样做:

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