我需要创建一个N x 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有一个更简单的方法来做到这一点,但我现在错过了它。
答案 0 :(得分:3)
如果问题仅仅是使用一个随机库(正如您在评论中所述),您可以使用numpy.random.choice
和参数replace=False
,这可以确保每个元素不会重复:< / p>
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]])