我想在 numpy 中生成一个秩为 5 的 100x600 矩阵,其中所有条目都是从 np.random.uniform(0, 20) 中采样的,这样所有条目都将均匀分布在 [0, 20) 之间。在 python 中这样做的最佳方法是什么?
我看到这里有一种 SVD 启发的方法(https://math.stackexchange.com/questions/3567510/how-to-generate-a-rank-r-matrix-with-entries-uniform),但是我不知道如何编码。我正在寻找这种受 SVD 启发的方法来获得均匀分布的条目的工作示例。
实际上,我已经设法通过垂直堆叠五个 20x100 秩 1 矩阵,然后对垂直索引进行洗牌来编写一个秩为 5 100x100 的矩阵。但是,生成的 100x100 矩阵没有均匀分布的条目 [0, 20)。
这是我的代码(我最好的尝试):
import numpy as np
def randomMatrix(m, n, p, q):
# creates an m x n matrix with lower bound p and upper bound q, randomly.
count = np.random.uniform(p, q, size=(m, n))
return count
Qs = []
my_rank = 5
for i in range(my_rank):
L = randomMatrix(20, 1, 0, np.sqrt(20))
# L is tall
R = randomMatrix(1, 100, 0, np.sqrt(20))
# R is long
Q = np.outer(L, R)
Qs.append(Q)
Q = np.vstack(Qs)
#shuffle (preserves rank 5 [confirmed])
np.random.shuffle(Q)