问题描述
总有没有要依靠特定种子来加快每行scipy rvs
方法的调用吗?
import pandas as pd
import numpy as np
from scipy.stats import norm
df = pd.DataFrame({"loc": range(1000),"seed": range(1000)})
def apply_rvs(x):
np.random.seed(x["seed"])
return norm.rvs(x["loc"],1)
%timeit df.apply( lambda x: apply_rvs(x),axis=1)
# 109 ms ± 3.53 ms per loop (mean ± std. dev. of 7 runs,10 loops each)
numba似乎不适用于肮脏的物体
import numba
@numba.jit
def numba_apply_rvs(x):
np.random.seed(x["seed"])
return norm.rvs(x["loc"],1)
df.apply( lambda x: numba_apply_rvs(x),axis=1)
由于启用了函数“ apply_rvs”导致类型推断失败,导致编译回落到对象模式,原因是:未键入的全局名'norm':无法确定
的Numba类型>
除了并行化之外,还有什么其他方法可以用来加快此操作的速度?
如果我可以打个电话生成所有类似的值,那就很好
In [33]: norm.rvs([1,2,3,4],[.1,.1,.1])
Out[33]: array([0.93510993,2.15662676,2.79086298,4.14563281])
但不幸的是,random_state
无法作为数组传递。
解决方法
您的活动部件过多---熊猫,numba,scipy.stats ---我们需要做更多的工作来解决瓶颈所在。例如。是熊猫还是只是随机样本的生成? IOW,您应该在没有熊猫的情况下为后者计时。
如果瓶颈是随机抽样,则使用a := "<tlc:919876543212@abc.google.com>; tag=kkytuybsjdf <nil>"
n := strings.Index(a,":")
m := strings.Index(a,"@")
if n > -1 && m > -1 {
number := a[n+1 : m]
fmt.Println(number)
} else {
fmt.Println("Index not found")
}
中的正态分布。否则,请考虑加快熊猫部分的速度等