Как создать массив случайных целых чисел в заданном диапазоне без дубликатов

295 просмотра
0
0 Комментариев

Есть задача: создать массив (3 оси по пять элементов), все элементы должны быть уникальными.

С созданием все понятно:

import numpy as np
 
a = np.random.randint(1, 91, (3, 5))

А вот как сделать все элементы массива уникальными?


Добавить комментарий

2 Answers

Python Опубликовано 18.12.2018
0

import random
def generate():
    numbers = [] # empty list
    while len(numbers) < 15:
        s = random.randint(1,10000) # create a random number
        if s not in numbers:numbers.append(s)
    result = [numbers[5*i:(5*(i+1))] for i in range(3)]
    return result

Добавить комментарий
0

In [4]: a = np.random.choice(np.arange(1, 92), size=(3,5), replace=False)
 
In [5]: a
Out[5]:
array([[44, 37, 66, 87, 71],
       [40, 14, 45, 81, 64],
       [54,  6, 62, 46,  8]])

если нужна 3D матрица («3 оси по пять элементов»):

In [6]: a = np.random.choice(500, size=(5,5,5), replace=False)
 
In [7]: a
Out[7]:
array([[[213, 259, 331, 201, 291],
        [362, 483, 430,  90,  75],
        [  8, 261, 120, 384,  23],
        [188, 412, 150, 127, 441],
        [299, 122, 119, 403, 479]],
 
       [[244, 406, 118, 311, 288],
        [ 66,   3, 214, 447, 495],
        [235, 438, 194, 210, 333],
        [289,  47, 230, 126, 456],
        [498, 454, 453, 435, 255]],
 
       [[266,  92, 383, 135, 268],
        [278, 341, 215, 353,  99],
        [124, 402,  14,  24, 163],
        [170, 304, 175, 381,  71],
        [442, 354, 455, 254,   2]],
 
       [[432, 303, 197, 487, 209],
        [334, 373, 297, 389,  33],
        [484,  57,  61, 189, 463],
        [270, 284,  84, 262, 277],
        [ 56, 392, 200,  54,  96]],
 
       [[198,  37, 247, 312, 477],
        [ 82, 204,  70,  97,  16],
        [222, 448, 224, 225, 167],
        [473, 232, 377, 138, 148],
        [ 63, 452, 108, 355,  69]]])
 
In [8]: a.shape
Out[8]: (5, 5, 5)

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up