在numpy中生成随机矩阵,不包含全为1的行

Ipu*_*ono 3 python arrays numpy

我正在生成一个随机矩阵

np.random.randint(2, size=(5, 3))
Run Code Online (Sandbox Code Playgroud)

输出类似

[0,1,0],
[1,0,0],
[1,1,1],
[1,0,1],
[0,0,0]
Run Code Online (Sandbox Code Playgroud)

如何在每行不能包含所有1'的条件下创建随机矩阵?也就是说,每一行可以是[1,0,0][0,0,0][1,1,0][1,0,1]或[0,0,1]或[0,1,0][0,1,1]不能[1,1,1]

谢谢你的回答

bus*_*ear 7

这是一种有趣的方法:

rows = np.random.randint(7, size=(6, 1), dtype=np.uint8)
np.unpackbits(rows, axis=1)[:, -3:]
Run Code Online (Sandbox Code Playgroud)

本质上,您为每行选择整数0-6,即选择000-110作为二进制。7将是111(全1)。您只需要提取二进制数字作为列,然后获取最后3位数字(您的3列),因为输出的unpackbits是8位数字。

输出:

array([[1, 0, 1],
       [1, 0, 0],
       [1, 0, 0],
       [1, 0, 0],
       [0, 1, 1],
       [0, 0, 0]], dtype=uint8)
Run Code Online (Sandbox Code Playgroud)