2013-02-12 47 views
0

我想知道idl中是否有一個模塊可以用來加擾浮點數的數組。我試着用scramble.pro但問題是,它返回一個整數,如果我嘗試使用浮動不會返回我進入確切的數字,例如:在idl中對數組進行加擾

array = [2.3, 4.5, 5.7,8.9] 
scr_array = scramble(array) 
print, scr_array 

output: 

4 2 8 5 

,如果我使用float:

print, float(scr_array) 

輸出爲:

4.0000 2.0000 8.0000 5.0000 

任何想法?

回答

1

嘗試使用this採樣例程,但要求所有的元素:

IDL> array = [2.3, 4.5, 5.7,8.9] 
IDL> scramble_indices = mg_sample(4, 4) 
IDL> print, scramble_indices 
      1   3   0   2 
IDL> print, array[scramble_indices] 
     4.50000  8.90000  2.30000  5.70000 
+0

+1,但是在香草IDL中沒有辦法做到這一點嗎? Matlab和R有這種內置的功能。 – 2013-02-26 21:35:11

+0

我不知道任何內置庫例程來做到這一點。 – mgalloy 2013-03-04 21:30:36

0

scramble.pro假定輸入是一個整數陣列,所以它總是給一個整數數組作爲其輸出。你可以,但是,用它來生成指數的隨機排序和飼料這些回原來的陣列(如mgalloy已與mg_sample完成):

IDL> array = [2.3, 4.5, 5.7,8.9] 
IDL> scr_array = array[scramble(n_elements(array))] 
IDL> print, scr_array 
     8.90000  2.30000  5.70000  4.50000 

這裏,scramble被賦予一個整數值,所以它創建所需的隨機索引。對於香草IDL只,我經常使用組合randomusort函數來獲得同樣的效果:

IDL> array = [2.3, 4.5, 5.7,8.9]     
IDL> indices = sort(randomu(seed, n_elements(array))) 
IDL> scr_array = array[indices]      
IDL> print, indices         
      3   2   0   1 
IDL> print, scr_array         
     8.90000  5.70000  2.30000  4.50000 

在這裏,我們使用randomu生成具有相同數量的元素作爲array一組隨機數,並且sort給了我們將按順序放置隨機數組的指數。他們一起給你一個隨機的指數排序。當然,你也可以把它放在一條線上:

IDL> array = [2.3, 4.5, 5.7,8.9]      
IDL> scr_array = array[sort(randomu(seed, n_elements(array)))] 
IDL> print, scr_array 
     5.70000  2.30000  8.90000  4.50000