如何根据 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 个新号码即可。
- 使用
flatten
将 2d larger_matrix
转换为 1d。
- 然后你可以使用
random.choice
从larger_matrix
中获取随机样本
- 最后,使用
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))
我想知道是否有一种方法可以生成一个矩阵,其值基于更大的矩阵。例如,如果我有
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 个新号码即可。
- 使用
flatten
将 2dlarger_matrix
转换为 1d。 - 然后你可以使用
random.choice
从larger_matrix
中获取随机样本
- 最后,使用
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))