【问题标题】:How can I generate a matrix with random values based from a larger matrix in Python?如何根据 Python 中的较大矩阵生成具有随机值的矩阵?
【发布时间】:2021-08-05 08:07:34
【问题描述】:

我想知道是否有一种方法可以生成具有基于更大矩阵的值的矩阵。例如,如果我有

larger_matrix = np.random.randint(10, size=(10,5))

Out[1]: 
array([[0, 9, 0, 0, 3],
       [9, 4, 7, 7, 0],
       [9, 4, 5, 6, 9],
       [6, 3, 1, 7, 3],
       [8, 4, 6, 9, 7],
       [8, 1, 5, 8, 8],
       [9, 9, 6, 0, 9],
       [9, 9, 6, 8, 7],
       [5, 5, 6, 6, 4],
       [4, 4, 7, 0, 7]])

我想创建大小为 (4, 5) 的 smaller_matrix,其值从 larger_matrix 中随机采样,我该怎么做?我知道函数np.random.choice() 存在,但我很不确定它是否对我的问题有帮助,因为我处理的是矩阵而不是列表。谢谢。

【问题讨论】:

    标签: python python-3.x simulation


    【解决方案1】:
    1. 使用flatten 将二维larger_matrix 转换为一维。
    2. 然后你可以使用random.choicelarger_matrix获取随机样本
    3. 最后,使用reshape 将一维列表转换为二维矩阵

    代码:

    import numpy as np
    larger_matrix = np.random.randint(10, size=(10,5))
    print(larger_matrix)
    n = 4
    m = 5
    print(np.reshape(np.random.choice(larger_matrix.flatten(),size = n*m),(n,m)))
    

    结果:

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

    【讨论】:

      【解决方案2】:

      您可以在 for 循环中运行 for 循环,并使用它用矩阵中的随机索引填充较小的矩阵。 For i in range(len(larger_matrix)): For j in range(len(larger_matrix[0])): smaller_matrix[i][j] = larger_matrix[rand1][rand2] 那应该涵盖它。只需确保每次生成 2 个新数字即可。

      【讨论】:

        【解决方案3】:

        您可以这样做,但请记住,从大数组中选择的选项可能会重复:-

        import numpy as np
        import random
        R1 = 10
        R2 = 4
        C = 5
        m = np.random.randint(R1, size=(R1, C))
        print(m)
        print()
        n = []
        for _ in range(R2):
            n.append(random.choice(m))
        print(np.array(n))
        

        【讨论】:

          猜你喜欢
          • 2018-10-26
          • 2018-08-11
          • 1970-01-01
          • 1970-01-01
          • 2016-06-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-21
          相关资源
          最近更新 更多