【问题标题】:Generate random binary matrix constrained to no null row生成限制为无空行的随机二进制矩阵
【发布时间】:2022-12-03 22:55:44
【问题描述】:
我想生成一个随机二进制矩阵,所以我使用 W=np.random.binomial(1, p, (n,n))。
它工作正常,但我想要一个约束,即没有一行只是 0。
我创建了以下函数:
def random_matrix(p,n):
m=0
while m==0:
W = np.random.binomial(1, p, (n,n))
m=min(W.sum(axis=1))
return W
它也可以正常工作,但在我看来效率太低了。有没有更快的方法来创建这个约束?
【问题讨论】:
标签:
python
numpy
loops
matrix
random
【解决方案1】:
一种更有效地生成没有行只有 0 的随机二进制矩阵的方法是使用 np.random.choice 函数从矩阵的每一行中随机选择一个非零条目并将其值设置为 1 . 这避免了使用 while 循环和重复检查仅 0 的行的需要,这对于大型矩阵来说可能是计算昂贵的。
下面是一个示例,说明如何使用 np.random.choice 函数生成一个随机二进制矩阵,其中没有仅包含 0 的行:
W = np.random.binomial(1, p, (n,n))
for row in W:
nonzero_indices = np.where(row != 0)[0]
if nonzero_indices.size == 0:
random_index = np.random.randint(0, n)
row[random_index] = 1
else:
random_index = np.random.choice(nonzero_indices)
row[random_index] = 1