2016-04-04 2 views
6

Предположим, я хочу, чтобы создать список или Numpy массив из 5 элементов, как это:Как создать массив случайных в некотором диапазоне

array = [i, j, k, l, m] 

где:

  • i находится в диапазоне 1,5 до 12,4
  • j находится в диапазоне от 0 до 5
  • k находится в диапазоне от 4 до 16
  • l находится в диапазоне от 3 до 5
  • m находится в диапазоне от 2,4 до 8,9.

Это пример, показывающий, что некоторые диапазоны включают в себя фракции. Что было бы простым способом сделать это?

+2

5-мерные или 5 элементов? – Divakar

+1

Сделайте 5 соответствующих вызовов функций 'np.random' и привяжите результаты в массиве. – user2357112

+0

@ Divakar 5-elemental :-D –

ответ

10

Вы можете просто сделать (спасибо user2357112!)

[np.random.uniform(1.5, 12.4), np.random.uniform(0, 5), ...] 

использованием numpy.random.uniform.

+2

Это уже существует; это ['np.random.uniform'] (http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.random.uniform.html). – user2357112

+0

@ user2357112 Спасибо! Я обновлю. –

+0

[По-видимому, средние 3 элемента должны быть целыми числами.] (Http://stackoverflow.com/questions/36412006/how-to-create-a-random-array-in-a-certain-range?noredirect=1# comment60440012_36412006) – user2357112

1
import random 
array = [random.uniform(1.5, 12.4), random.uniform(0,5)] 

print(array) 

печатает:

[9.444064187694842, 1.2256912728995506] 

Вы могли бы хотеть, чтобы закруглить их с круглыми()

6

Я хотел бы предложить генерируя их вручную и создать список позже:

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] 

Если вы хотите создать их все в одном g О, вы можете использовать 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]) 
Смежные вопросы