2013-02-12 3 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 

и если я использую поплавок:

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 имеют встроенную функциональность. –

+0

Я не знаю никаких встроенных библиотечных процедур для этого. – mgalloy

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 только, я часто использую в 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 
Смежные вопросы