【问题标题】: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
    

    【讨论】:

      猜你喜欢
      • 2015-11-26
      • 2020-07-27
      • 2020-08-31
      • 2020-03-16
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 2017-04-30
      • 1970-01-01
      相关资源
      最近更新 更多