【问题标题】:Creating a numpy matrix without replacement in rows [duplicate]创建一个没有替换行的numpy矩阵[重复]
【发布时间】:2018-10-16 13:36:41
【问题描述】:

我可以轻松地使用np.random.choicereplace=False 来生成一维数组而无需替换。但是,我需要生成一个 matrix 以便每一行都没有替换,即[[1, 2, 3], [2, 3, 1], [3, 1, 2]]np.random.randint 是显而易见的选择,但在此功能中没有规定不重复。我也不想将新行迭代地附加到矩阵中,因为我认为这是相当低效的。那么,生成矩阵最有效的方法是什么?

【问题讨论】:

  • “我也不希望将新行迭代地追加到矩阵中”这包括列表理解吗?

标签: python numpy


【解决方案1】:

您可以先创建整个数组,然后使用np.random.shuffle 对行进行洗牌。

n = 3
data = np.arange(n*n).reshape(n, n) % n + 1
for row in data:
    np.random.shuffle(row)

这里,模运算符用于在每一行中生成从 0 到 (n-1) 的数字。


作为替代,

data = np.empty(shape=(3, 3))

为空数组保留内存,之后可以更有效地填充:

for i in range(len(data)):
    data[i,:] = np.random.choice(3, 3, replace=False) + 1

【讨论】:

    【解决方案2】:

    您可以使用列表推导:

    data = np.array([np.random.choice([1,2,3], 3, replace=False) for _ in range(3)])
    

    【讨论】:

      猜你喜欢
      • 2017-04-12
      • 2020-04-25
      • 2014-02-09
      • 2018-07-12
      • 2011-08-17
      • 1970-01-01
      • 2014-12-17
      • 1970-01-01
      • 2017-05-09
      相关资源
      最近更新 更多