2014-10-10 4 views
-2

Допустим, у меня есть один столбец с плавающей точкой массива нецелых значений:генерации случайного числа между двумя значениями из массива в Python

Data = [1,1; 1,2; 1,3; 1,4; 1.5]

Я хотел бы создать случайные числа между двумя последовательными значениями в этом массиве и сохранить их в новом массиве. I. Первое значение в новом массиве будет случайным числом между 1.1 и 1.2, следующим случайным числом между 1.2 и 1.3 и т. Д.

Я ищу для получения нового массива, такого как data_rand = [1.15; 1,24; 1,37; 1.46] на основе исходного массива данных.

Мой вопрос (как бы я/что является лучшим методом) перебирать все значения в массиве и генерировать нецелое случайное число между каждой последующей парой чисел в массиве, сохраняя эти случайные числа в новый массив? Может ли кто-нибудь представить пример, основанный на этом небольшом 5-значном массиве данных? Или укажите мне в правильном направлении для каждого этапа процесса.

+2

Это не Python - так вы имеете в виду 'list', как' [1,1, 1,2, 1,3] '? Что вы пробовали до сих пор, и в чем именно проблема? – jonrsharpe

ответ

0
import random  
rand_data = map(random.uniform, data[:-1], data[1:]) 

random.uniform(a, b) дает случайное число с плавающей точкой между a и b. Вы можете сопоставить эту функцию с двумя фрагментами вашего списка (первый срез удаляет последний элемент, второй срез удаляет первый элемент). Итак, в вашем примере два фрагмента будут выглядеть так: [1.1, 1.2, 1.3, 1.4] и [1.2, 1.3, 1.4, 1.5].

1

Чтобы получить случайное значение между a и b, вы можете добавить random значения между 0 и 1, умноженным абсолютной разницей между a и b, наималейшим из a и b.

Чтобы получить пар элементов в списке легко, вы можете использовать zip и ломтик:

>>> l = [1, 2, 3] 
>>> zip(l, l[1:]) 
[(1, 2), (2, 3)] 

Кроме того, я предлагаю вам есть идти самостоятельно.

0
import random 

results = [] 
l = [1.1, 1.2, 1.3, 1.4, 1.5] 

for x in zip(l, l[1:]): 
    x = list(int(y * 100) for y in x) 
    results.append(float(random.randrange(x[0], x[1]))/100) 

Здесь я умножаю/делю на 100, потому что я хотел 2 десятичных знака, используйте 10 для 1 десятичной дроби.

Выходные:

результаты

[1.14, 1.22, 1.37, 1.44] 
Смежные вопросы