Заполнение массива рандомными числами питон

Python: Random numbers into a list

Create a ‘list’ called my_randoms of 10 random numbers between 0 and 100. This is what I have so far:

import random my_randoms=[] for i in range (10): my_randoms.append(random.randrange(1, 101, 1)) print (my_randoms) 
[34] [34, 30] [34, 30, 75] [34, 30, 75, 27] [34, 30, 75, 27, 8] [34, 30, 75, 27, 8, 58] [34, 30, 75, 27, 8, 58, 10] [34, 30, 75, 27, 8, 58, 10, 1] [34, 30, 75, 27, 8, 58, 10, 1, 59] [34, 30, 75, 27, 8, 58, 10, 1, 59, 25] 

It generates the 10 numbers like I ask it to, but it generates it one at a time. What am I doing wrong?

Actually, you are generating the numbers one at a time, but your original code has you printing the values each time one is generated. The solutions below that talk about the print statement simply wait and print the list after all the numbers are generated.

Computers programs in Python always do one thing at a time. Every program is a sequence of very tiny steps. Now, the question then becomes «What steps do I want completed when I print the list?». And you, apparently, want all the random numbers to be added to the list before you print it. If you remove the indent before the print it will execute after all the steps of the for loop have executed repeatedly. Indented the print is part of the sequence of steps executed as the list is built.

10 Answers 10

You could use random.sample to generate the list with one call:

import random my_randoms = random.sample(range(100), 10) 

That generates numbers in the (inclusive) range from 0 to 99. If you want 1 to 100, you could use this (thanks to @martineau for pointing out my convoluted solution):

my_randoms = random.sample(range(1, 101), 10) 

Sample won’t include duplicate values, which may or may not matter in this use case, but worth noting

For values in the range of 1..100 it would be simpler to use random.sample(xrange(1, 101), 10) than a list comprehension.

Читайте также:  404 Error - Page Not Found

@thanos.a xrange doesn’t exist anymore in Python 3, but you can use range instead: geeksforgeeks.org/range-vs-xrange-python

import random my_randoms = [random.randrange(1, 101, 1) for _ in range(10)] 

Fix the indentation of the print statement:

import random my_randoms=[] for i in range (10): my_randoms.append(random.randrange(1,101,1)) print (my_randoms) 

This works because you are printing my_randoms each time one of the values is generated. By unindenting the print() statement, it is placed outside the loop and only executed once after the for loop has finished.

For other beginners (future readers), perhaps expand with an explanation regarding indentation error?

This is actually the only answer that addresses OP’s query. Others are good of course, but they just improve/provide alternative on syntax, or methods, etc. OP’s problem was just indentation, guys !

This is way late but in-case someone finds this helpful.

You could use list comprehension.

rand = [random.randint(0, 100) for x in range(1, 11)] print(rand) 
[974, 440, 305, 102, 822, 128, 205, 362, 948, 751] 

Here I use the sample method to generate 10 random numbers between 0 and 100.

Note: I’m using Python 3’s range function (not xrange ).

import random print(random.sample(range(0, 100), 10)) 

The output is placed into a list:

[11, 72, 64, 65, 16, 94, 29, 79, 76, 27] 

xrange() will not work for 3.x.

numpy.random.randint().tolist() is a great alternative for integers in a specified interval:

 #[In]: import numpy as np np.random.seed(123) #option for reproducibility np.random.randint(low=0, high=100, size=10).tolist() #[Out:] [66, 92, 98, 17, 83, 57, 86, 97, 96, 47] 

You also have np.random.uniform() for floats:

#[In]: np.random.uniform(low=0, high=100, size=10).tolist() #[Out]: [69.64691855978616, 28.613933495037948, 22.68514535642031, 55.13147690828912, 71.94689697855631, 42.3106460124461, 98.07641983846155, 68.48297385848633, 48.09319014843609, 39.211751819415056] 
import random a=[] n=int(input("Enter number of elements:")) for j in range(n): a.append(random.randint(1,20)) print('Randomised list is: ',a) 

Thanks for your answer. A short explanation regarding what he was doing wrong, as requested, would be great.

Simple solution:

indices=[] for i in range(0,10): n = random.randint(0,99) indices.append(n) 

The one random list generator in the random module not mentioned here is random.choices :

my_randoms = random.choices(range(0, 100), k=10) 

It’s like random.sample but with replacement. The sequence passed doesn’t have to be a range; it doesn’t even have to be numbers. The following works just as well:

my_randoms = random.choices(['a','b'], k=10) 

If we compare the runtimes, among random list generators, random.choices is the fastest no matter the size of the list to be created. However, for larger lists/arrays, numpy options are much faster. So for example, if you’re creating a random list/array to assign to a pandas DataFrame column, then using np.random.randint is the fastest option.

Читайте также:  Python os copy directory with files

enter image description here

Code used to produce the above plot:

import perfplot import numpy as np import random perfplot.show( setup=lambda n: n, kernels=[ lambda n: [random.randint(0, n*2) for x in range(n)], lambda n: random.sample(range(0, n*2), k=n), lambda n: [random.randrange(n*2) for i in range(n)], lambda n: random.choices(range(0, n*2), k=n), lambda n: np.random.rand(n), lambda n: np.random.randint(0, n*2, size=n), lambda n: np.random.choice(np.arange(n*2), size=n), ], labels=['random_randint', 'random_sample', 'random_randrange', 'random_choices', 'np_random_rand', 'np_random_randint', 'np_random_choice'], n_range=[2 ** k for k in range(17)], equality_check=None, xlabel='~n' ) 

Источник

Как заполнить массив случайными числами в Python

Массив — одна из основных структур данных в Python. Его элементы хранятся в одном месте и к ним можно получить доступ по индексу. Для реализации такой структуры данных используется библиотека numpy. Также имитировать массив в Python может встроенный тип данных список (list). В данной статье мы обсудим, как заполнить массив случайными числами.

Мы всегда можем создать массив любой размерности и иногда, для некоторых вычислений, его нужно заполнить произвольными значениями. Для этого в библиотеке numpy реализован модуль random, который генерирует случайные числа.

Как заполнить массив случайными числами при помощи функции numpy.random.randint()

Как уже говорилось ранее, в библиотеке numpy есть модуль random , который может помочь в генерации случайных чисел для массивов numpy. При помощи функции randint() можно сгенерировать массив нужного размера и заполнить его случайными числами.

Нам нужно запомнить три основных параметра, которые принимает данная функция. Первые два являются предельными значениями для случайных чисел. Функция будет выбирать случайное число именно из этого диапазона. Третий параметр определяет форму требуемого массива.

import numpy as np arr = np.random.randint(0,10,10) print(*arr) # Результат: # 3 8 1 0 4 2 4 7 0 3

В данном примере мы сгенерировали 10 случайных чисел и заполнили ими одномерный массив длиной 10.

Как заполнить массив случайными числами при помощи функции numpy.random.Generator.integers()

Функция numpy.random.Generators предлагает альтернативный способ генерации случайных чисел. Она использует дополнительный BitGenerator для создания случайных битов и управления их состоянием. Для его инициации используется конструктор numpy.random.default_rng() .

После этого мы можем использовать функцию numpy.random.Generator.integers() для генерации случайных целых чисел и заполнения ими массива в Python.

Как и в предыдущем случае, нам нужно будет задать параметры диапазона и формы массива.

import numpy as np g = np.random.default_rng() arr = g.integers(0,5,10) print(arr) # Результат: # [0 2 1 1 1 0 1 1 3 0]

Заполнение массива случайными числами при помощи функции random.randint()

Как говорилось ранее, списки в Python также могут представлять собой массив. Мы можем заполнить списки случайными числами, используя модуль random в Python. Для этого мы будем использовать генератор списков вместе с функцией random.randint() .

Читайте также:  Php echo red color

Мы применим функцию random.randint() для создания случайного числа в заданном диапазоне, а генератор списков будет вызывать ее нужное количество раз, производя список заданной длинны.

import random arr = [random.randint(1,5) for _ in range(10)] print(arr) # Результат: # [4, 2, 5, 3, 2, 2, 3, 3, 4, 2]

Заключение

В данной статье мы разобрали различные методы заполнения массива случайными числами в Python. По сути, мы создавали массивы со случайными числами. Для этого мы использовали массивы numpy и списки Python.

Для массивов numpy мы рассмотрели два способа заполнения. В первом случае использовалась традиционная функция numpy.random.randint() , которая генерирует массив numpy заданной длины, заполненный случайными числами в заданном диапазоне. А во втором случае мы использовали относительно новый модуль numpy.random.Generators , который обеспечивает дополнительное состояние для управления и генерации случайных битов.

В последнем примере мы разобрали, как в Python заполнить массив случайными числами при помощи генератора списков и функции random.randint() . По сути мы создали цикл, который вызывал функцию random.randint() нужное количество раз, генерируя при этом случайное число и добавляя его в список Python.

Источник

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

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?

I know this is 6 years late, but an even more efficient way to create an N-square matrix of zeroes is [[0]*N]*N .

7 Answers 7

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 ndarray s. 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.)

Источник

Оцените статью