Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Simple way of creating a 2D array with random numbers (Python)

I know that an easy way to create a NxN array full of zeroes in Python is with:

[[0]*N for x in range(N)]

However, let's suppose I want to create the array by filling it with random numbers:

[[random.random()]*N for x in range(N)]

This doesn't work because each random number that is created is then replicated N times, so my array doesn't have NxN unique random numbers.

Is there a way of doing this in a single line, without using for loops?

like image 864
user46242 Avatar asked Jun 08 '14 16:06

user46242


People also ask

How do you generate an array of random numbers in Python?

An array of random integers can be generated using the randint() NumPy function. This function takes three arguments, the lower end of the range, the upper end of the range, and the number of integer values to generate or the size of the array.

How do you create a random 2D array in Python numpy?

To create a numpy array of specific shape with random values, use numpy. random. rand() with the shape of the array passed as argument. In this tutorial, we will learn how to create a numpy array with random values using examples.

How do you make an array of random numbers?

In order to generate random array of integers in Java, we use the nextInt() method of the java. util. Random class. This returns the next random integer value from this random number generator sequence.


1 Answers

You could use a nested list comprehension:

>>> N = 5
>>> import random
>>> [[random.random() for i in range(N)] for j in range(N)]
[[0.9520388778975947, 0.29456222450756675, 0.33025941906885714, 0.6154639550493386, 0.11409250305307261], [0.6149070141685593, 0.3579148659939374, 0.031188652624532298, 0.4607597656919963, 0.2523207155544883], [0.6372935479559158, 0.32063181293207754, 0.700897108426278, 0.822287873035571, 0.7721460935656276], [0.31035121801363097, 0.2691153671697625, 0.1185063432179293, 0.14822226436085928, 0.5490604341460457], [0.9650509333411779, 0.7795665950184245, 0.5778752066273084, 0.3868760955504583, 0.5364495147637446]]

Or use numpy (non-stdlib but very popular):

>>> import numpy as np
>>> np.random.random((N,N))
array([[ 0.26045197,  0.66184973,  0.79957904,  0.82613958,  0.39644677],
       [ 0.09284838,  0.59098542,  0.13045167,  0.06170584,  0.01265676],
       [ 0.16456109,  0.87820099,  0.79891448,  0.02966868,  0.27810629],
       [ 0.03037986,  0.31481138,  0.06477025,  0.37205248,  0.59648463],
       [ 0.08084797,  0.10305354,  0.72488268,  0.30258304,  0.230913  ]])

(P.S. It's a good idea to get in the habit of saying list when you mean list and reserving array for numpy ndarrays. There's actually a built-in array module with its own array type, so that confuses things even more, but it's relatively seldom used.)

like image 64
DSM Avatar answered Oct 21 '22 23:10

DSM