Numpy生成最多N个二进制数组

时间:2019-01-27 21:43:56

标签: python numpy

这样做很容易在Numpy中创建一个随机二进制数组

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

但是我真正想要的是设置数组中可以存在的最大1s。

例如,如果我想要一个5,5的二进制矩阵,我希望在整个矩阵中最多随机放置10个,其​​余为0。

我在想一种方法,可以像正常情况一样生成随机数组,计算当前放置的1的数量,然后以某种方式减去不需要的数。

我想知道是否有办法在numpy中做到这一点

1 个答案:

答案 0 :(得分:1)

这是我能想到的最基本的方法:

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 s个数组。返回一个rxc数组。