【问题标题】:Generating multiple pairs of unequal random integers in python/numpy在 python/numpy 中生成多对不相等的随机整数
【发布时间】:2020-05-14 17:37:56
【问题描述】:

在蒙特卡洛模拟的上下文中,我正在生成随机索引对,使用

ij = np.random.randint(0, N, (n,2))

其中n 可能非常大(例如10**6)。然后我循环这些对。

问题:
我希望每对中的数字不同。

我发现的解决方案(例如,使用random.samplenp.random.choice)建议逐对生成数字。在我的情况下,这意味着在循环中重复调用随机数生成器,这会减慢代码的速度。

【问题讨论】:

    标签: python numpy random


    【解决方案1】:

    这是一个简单的方法:

    import numpy as np
    
    N = 10
    n = 10000
    
    np.random.seed(0)
    i = np.random.choice(N, n)
    j = np.random.choice(N - 1, n)
    j[j >= i] += 1
    print(np.any(i == j))
    # False
    ij = np.stack([i, j], axis=1)
    

    【讨论】:

      【解决方案2】:

      一种方法是迭代更新那些具有相同对的元素:

      m = np.full(ij.shape[0], True)
      while m.any():
          ij[m] = np.random.randint(0, N, (m.sum(),2))
          m = ij[:,0] == ij[:,1]
      

      【讨论】:

        猜你喜欢
        • 2016-02-20
        • 1970-01-01
        • 2014-10-24
        • 1970-01-01
        • 1970-01-01
        • 2019-04-25
        • 2013-11-30
        • 2017-07-30
        • 2022-01-04
        相关资源
        最近更新 更多