首页 文章

高效的方法来创建一系列数字随机改组的二维数组[重复]

提问于
浏览
2

这个问题在这里已有答案:

我需要创建一个N×M numpy数组,其随机改组的数字为0到N.也就是说,矩阵的每一行都以随机顺序中的每个数字0到N中恰好有一个,没有重复元素,每个数字都表示 .

到目前为止我能想出的最好的是(对于N = 10和M = 5)

import random
import numpy as np

a = np.array([random.sample(range(10), 10) for x in range(5)])

这给了我

[[5 9 1 3 8 2 6 4 0 7]
 [4 8 5 2 9 3 7 6 0 1]
 [8 4 6 7 9 2 0 5 1 3]
 [3 5 4 9 2 0 6 7 1 8]
 [6 0 4 7 3 2 1 8 5 9]]

我目前的解决方案确实有效,但我想在可能的情况下只有一个随机库(我在其他地方使用numpy,所以只有一个numpy解决方案才是理想的) . 我假设numpy有一个更简单的方法来做到这一点,但我现在错过了它 .

1 回答

  • 3

    如果问题只是使用一个随机库(正如你在评论中所说的那样),你可以使用带有参数 replace=Falsenumpy.random.choice,这可以确保不重复每个元素:

    import numpy as np
    
    a = np.stack([np.random.choice(range(10), 10, replace=False) for _ in range(5)])
    
    >>> a
    array([[0, 9, 3, 5, 8, 7, 1, 4, 6, 2],
           [5, 6, 8, 3, 0, 4, 7, 9, 2, 1],
           [7, 4, 9, 5, 0, 1, 6, 8, 3, 2],
           [9, 0, 3, 8, 5, 7, 6, 1, 4, 2],
           [5, 6, 0, 1, 3, 4, 9, 8, 7, 2]])
    

相关问题