Python 优化种子SciPy操作
是否有任何方法可以加速依赖于特定种子的每行scipyPython 优化种子SciPy操作,python,pandas,numpy,scipy,Python,Pandas,Numpy,Scipy,是否有任何方法可以加速依赖于特定种子的每行scipyrvs方法调用 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"]) ret
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似乎不能很好地处理scipy对象
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”:无法确定
除了并行化之外,还有其他方法可以加快这个操作吗
如果我能打一个电话生成所有这些类似于
In [33]: norm.rvs([1,2,3,4],[.1,.1,.1,.1])
Out[33]: array([0.93510993, 2.15662676, 2.79086298, 4.14563281])
但是不幸的是,
random\u state
不能作为数组传递。您有太多的活动部件——pandas、numba、scipy.stats——我们需要更多的工作来解决瓶颈所在。例如,它是熊猫还是只是随机样本的生成?瞧,你应该在没有熊猫的情况下给后者计时
如果随机抽样是瓶颈,则使用
numpy.random
中的正态分布。否则,请考虑加快pandas部分的速度,等等您有太多的运动部件——pandas、numba、scipy.stats——我们需要更多的工作来解决瓶颈所在。例如,它是熊猫还是只是随机样本的生成?瞧,你应该在没有熊猫的情况下给后者计时
如果随机抽样是瓶颈,则使用
numpy.random
中的正态分布。否则,请查看加快pandas部件等是否有理由希望从不同的种子生成随机数?它用于测试过程,需要为每一行一致地生成相同的数据,因此需要一个种子。我不希望每一行都有相同的数据,因此我不能使用固定种子,否则在开始时固定种子仍将返回来自rvs()
的准随机绘制序列。每次抽签都设置种子是非常不寻常的基本想法是代码将运行一次并生成person\u id\u 1 time\u 1 value\u 1
,然后稍后再次运行以生成person\u id\u 1 time\u 1 value\u 1,person\u id\u 1 time\u 2 value\u 2
我希望value\u 1
在每种情况下都相同,因此,我使用person\u id
作为种子。您希望从不同的种子生成随机数有什么原因吗?它用于测试过程,需要为每一行一致地生成相同的数据,因此需要种子。我不希望每一行都有相同的数据,因此我不能使用固定种子,否则在开始时固定种子仍将返回来自rvs()
的准随机绘制序列。每次抽签都设置种子是非常不寻常的基本想法是代码将运行一次并生成person\u id\u 1 time\u 1 value\u 1
,然后稍后再次运行以生成person\u id\u 1 time\u 1 value\u 1,person\u id\u 1 time\u 2 value\u 2
我希望value\u 1
在每种情况下都是相同的,因此我使用person\u id\u id
作为种子。