Python Numpy生成不超过N个的二进制数组

Python Numpy生成不超过N个的二进制数组,python,numpy,Python,Numpy,通过这样做,我可以轻松地在Numpy中创建一个随机二进制数组 random_mask = np.random.randint(0,2, (r, c)) 但我真正想要的是设置数组中的最大1数 例如,如果我想要一个5,5的二进制矩阵,我希望在整个矩阵中随机放置最多10个,其余为0 我在想一种方法,我像普通人一样生成随机数组,计算当前放置的1的数量,然后以某种方式减去我不需要的1 我想知道在numpy中是否已经有这样做的方法这是我能想到的最基本的方法: import numpy as np def

通过这样做,我可以轻松地在Numpy中创建一个随机二进制数组

random_mask = np.random.randint(0,2, (r, c))
但我真正想要的是设置数组中的最大1数

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

我在想一种方法,我像普通人一样生成随机数组,计算当前放置的1的数量,然后以某种方式减去我不需要的1


我想知道在numpy中是否已经有这样做的方法这是我能想到的最基本的方法:

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数组。

hm是的,这就可以了-我想在numpy中没有内置的方法可以做到这一点?我不认为有一个内置的解决方案,但可能找到一个完全矢量化的解决方案。是的,我会处理它-谢谢你给我指出了正确的方向direction@Carpetfizz也许你也可以试试np.random.choice[0,1],r,c,p=[0.9,0.1],但我不太确定,如果这总是给你你需要的确切结果,因为毕竟,这只是一种可能性