我想知道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
有什么想法吗?
答案 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,我经常组合使用randomu
和sort
函数来获得相同的效果:
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