0

我想知道 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

如果我使用浮动:

print, float(scr_array)

输出是:

4.0000 2.0000 8.0000 5.0000

有任何想法吗?

4

2 回答 2

1

尝试使用采样例程,但要求所有元素:

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
于 2013-02-12T20:49:19.660 回答
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,我经常结合使用randomuandsort函数来获得相同的效果:

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
于 2013-04-17T02:42:37.050 回答