Как создать случайный массив в определенном диапазоне
Предположим, я хочу создать список или массив из 5 элементов, например так:
array = [i, j, k, l, m]
где:
i
находится в диапазоне от 1,5 до 12,4j
находится в диапазоне от 0 до 5k
находится в диапазоне от 4 до 16l
находится в диапазоне от 3 до 5m
находится в диапазоне от 2,4 до 8,9.
Это пример, чтобы показать, что некоторые диапазоны включают дроби. Что было бы простым способом сделать это?
3 ответа
Решение
Вы можете просто сделать (спасибо user2357112!)
[np.random.uniform(1.5, 12.4), np.random.uniform(0, 5), ...]
с помощью numpy.random.uniform
,
Я бы предложил создать их вручную и создать список позже:
import numpy as np
i = np.random.uniform(1.5, 12.4)
j = np.random.randint(0, 5) # 5 not included use (0, 6) if 5 should be possible
k = np.random.randint(4, 16) # dito
l = np.random.randint(3, 5) # dito
m = np.random.uniform(2.4, 8.9.)
array = np.array([i, j, k, l, m]) # as numpy array
# array([ 3.33114735, 3. , 14. , 4. , 4.80649945])
array = [i, j, k, l, m] # or as list
# [3.33114735, 3, 14, 4, 4.80649945]
Если вы хотите создать их все за один раз, вы можете использовать np.random.random
используйте диапазон и нижнюю границу, чтобы изменить их и преобразовать их в целое число, где вы не хотите плавать:
# Generate 5 random numbers between 0 and 1
rand_numbers = np.random.random(5)
# Lower limit and the range of the values:
lowerlimit = np.array([1.5, 0, 4, 3, 2.4])
dynamicrange = np.array([12.4-1.5, 5-0, 16-4, 5-3, 8.9-2.4]) # upper limit - lower limit
# Apply the range
result = rand_numbers * dynamicrange + lowerlimit
# convert second, third and forth element to integer
result[1:4] = np.floor(result[1:4])
print(result)
# array([ 12.32799347, 1. , 13. , 4. , 7.19487119])
import random
array = [random.uniform(1.5, 12.4), random.uniform(0,5)]
print(array)
печатает:
[9.444064187694842, 1.2256912728995506]
Вы можете округлить их с помощью round()