如何根据 Python 中的较大矩阵生成具有随机值的矩阵?

How can I generate a matrix with random values based from a larger matrix in Python?

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

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() 存在,但我不确定它是否对我的问题有帮助,因为我处理的是矩阵而不是列表。谢谢。

您可以 运行 在 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 个新号码即可。

  1. 使用 flatten 将 2d larger_matrix 转换为 1d。
  2. 然后你可以使用random.choicelarger_matrix
  3. 中获取随机样本
  4. 最后,使用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]]

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

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