我想使用scipy.stats的Beta.rvs函数生成大小为(500,1000000)的矩阵.

我已经try 了多线程,但仍然花费了太多的时间.有没有其他方法可以缩短执行时间?有没有其他图书馆可以做同样的事情?

推荐答案

你可以用numba来计算parallel with prange中的值:

import numpy as np
from scipy.stats import beta
import numba as nb

import matplotlib.pyplot as plt

a, b = 0.5, 10

N = 50, 1000000

result1 = beta.rvs(a, b, size=N)

@nb.njit(parallel=True, fastmath=True)
def beta_rvs(a, b, shape):
    out = np.empty(shape, dtype=np.float64).reshape(-1)
    size = np.asarray(shape).prod()
    for i in nb.prange(size):
        out[i] = np.random.beta(a, b)
    return out.reshape(shape)

result2 = beta_rvs(a, b, N)

%timeit -n 1 -r 1 beta.rvs(a, b, size=N)
%timeit -n 1 -r 1 beta_rvs(a, b, N)

输出:

3.62 s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)
696 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)

使用请求的形状输出:

39.1 s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)
6.75 s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)

直方图:

plt.hist(result1.ravel())
plt.hist(result2.ravel())

enter image description here enter image description here

Python相关问答推荐

Python json.转储包含一些UTF-8字符的二元组,要么失败,要么转换它们.我希望编码字符按原样保留

查找两极rame中组之间的所有差异

输出中带有南的亚麻神经网络

如何让程序打印新段落上的每一行?

NP.round解算数据后NP.unique

通过pandas向每个非空单元格添加子字符串

我如何根据前一个连续数字改变一串数字?

mypy无法推断类型参数.List和Iterable的区别

计算天数

在matplotlib中删除子图之间的间隙_mosaic

Gekko中基于时间的间隔约束

ModuleNotFoundError:没有模块名为x时try 运行我的代码''

为什么Python内存中的列表大小与文档不匹配?

在二维NumPy数组中,如何 Select 内部数组的第一个和第二个元素?这可以通过索引来实现吗?

使用__json__的 pyramid 在客户端返回意外格式

如何将相同组的值添加到嵌套的Pandas Maprame的倒数第二个索引级别

每次查询的流通股数量

分解polars DataFrame列而不重复其他列值

我可以同时更改多个图像吗?

Django查询集-排除True值