Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create a random array in a certain range

Suppose I want to create a list or a numpy array of 5 elements like this:

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

where:

  • i is in range 1.5 to 12.4
  • j is in range 0 to 5
  • k is in range 4 to 16
  • l is in range 3 to 5
  • m is in range 2.4 to 8.9.

This is an example to show that some ranges include fractions. What would be an easy way to do this?

like image 546
Clement Attlee Avatar asked Apr 04 '16 20:04

Clement Attlee


2 Answers

You can just do (thanks user2357112!)

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

using numpy.random.uniform.

like image 119
Ami Tavory Avatar answered Nov 11 '22 21:11

Ami Tavory


I would suggest generating them by hand and create the list later:

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]

If you want to create them all in one go you can use np.random.random use the range and the lower-bound to modify them and convert them to integer where you don't want floats:

# 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])
like image 6
MSeifert Avatar answered Nov 11 '22 20:11

MSeifert