我想生成一个形状为 (1e7, 800)
的随机矩阵。但我发现 numpy.random.rand()
在这种规模下变得非常慢。有没有更快的方法?
最佳答案
一个简单的方法是使用 Numba 编写一个多线程实现:
import numba as nb
import random
@nb.njit('float64[:,:](int_, int_)', parallel=True)
def genRandom(n, m):
res = np.empty((n, m))
# Parallel loop
for i in nb.prange(n):
for j in range(m):
res[i, j] = np.random.rand()
return res
这比我的 6 核机器上的 np.random.rand()
快 6.4 倍。
请注意,使用 32 位 float 可能有助于加快计算速度,但精度会降低。
https://stackoverflow.com/questions/70434025/