在idl中加扰数组

时间:2013-02-12 09:07:10

标签: idl-programming-language scramble

我想知道idl中是否有一个模块可以用来加扰一个浮点数组。我尝试使用scramble.pro,但问题是它返回整数,如果我尝试使用float,它不会返回我输入的确切数字,例如:

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

有什么想法吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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给出一个整数值,因此它创建了所需的随机索引。仅对于vanilla 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