python - 创建一系列数字随机洗牌的二维数组的有效方法

标签 python python-3.x numpy random

我需要创建一个由 0 到 N 的随机打乱数字组成的 N x M numpy 数组。也就是说,矩阵的每一行都以随机顺序恰好有 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 有一种更简单的方法来做到这一点,但我目前缺少它。

最佳答案

如果问题只是仅使用一个随机库(正如您在评论中所说),您可以使用 numpy.random.choice使用参数 replace=False,确保每个元素不重复:

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]])

关于python - 创建一系列数字随机洗牌的二维数组的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50217834/

相关文章:

python - 使用 python 的 long 类型的 numpy 数组

Python 忽略非空值之后的 DataFrame 行

python-3.x - 定义以数字开头的函数名(在 Python 3 中)?

python - 在我的 Django 代码中获取 KeyError

python - 为什么我无法将 Django 模型的 USPhoneNumberField 设置为 null=True、blank=True?

python - 检查列表理解中可变数量的条件

python - Ursina 模块中的 invoke() 做了什么

python - Gurobi Python API : model. addVars() 太慢

python - numpy 中的选择性行和矩阵

python - 如何在 python pandas 中获取多级索引中的一个系列