Numpy генерирует двоичный массив не более чем из N - PullRequest
0 голосов
/ 28 января 2019

Я могу легко создать случайный двоичный массив в Numpy, выполнив это

random_mask = np.random.randint(0,2, (r, c))

Но что я на самом деле хочу, так это установить максимальное число 1, которое может быть в массиве.

Например, если мне нужна бинарная матрица 5,5, я хочу, чтобы по всей матрице было случайным образом размещено не более 10 единиц, а остальные - 0 с.

Я думал о подходе, в котором ясгенерируйте случайный массив, как обычно, посчитайте количество единиц, которые в данный момент размещены, и каким-то образом вычтите те, которые мне не нужны.

Мне интересно, есть ли способ сделать это в numpy

1 Ответ

0 голосов
/ 28 января 2019

Это самый простой подход, о котором я мог подумать:

import numpy as np

def binary_mask_random(r, c, n):
    a = np.zeros((r,c)).flatten()

    for i in range(np.random.randint(0, n+1)):
        x = np.random.randint(0, r*c)
        a[x] = 1

    return a.reshape((r,c))

Он создает массив 1xr*c нулей и заполняет его до n 1 с в случайных позициях.Возвращает массив rxc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...