8

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?

7
  • 2
    5-dimensional or 5 elements? Commented Apr 4, 2016 at 20:14
  • 1
    Make 5 appropriate calls to np.random functions and stick the results in an array. Commented Apr 4, 2016 at 20:14
  • @Divakar 5-elemental :-D Commented Apr 4, 2016 at 20:16
  • Are j, k, and l allowed to take fractional values? Commented Apr 4, 2016 at 20:19
  • @user2357112 No. Those take natural numbers only Commented Apr 4, 2016 at 20:20

3 Answers 3

12

You can just do (thanks user2357112!)

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

using numpy.random.uniform.

Sign up to request clarification or add additional context in comments.

8 Comments

This already exists; it's np.random.uniform.
This is a good answer, but it ignores the fact that some of the ranges don't include fractions.
@ClementAttlee Thanks. Not sure what "some of the ranges don't include fractions" means, though.
@ClementAttlee Got it. I suggest you seeMSeifert's answer, then - he apparently addressed it (sorry to say, but I didn't get that from the question).
|
5

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])

Comments

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

print(array)

prints:

[9.444064187694842, 1.2256912728995506]

You might want to round these with round()

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.