代码获取Box和Cox转换的数据。原始数据是一个Pandas DataFrame,流程使用这个DataFrame。
我试图加快以下代码的速度。如果你能用更快的方式来阐述这一点,那将是非常有帮助的。
import numpy as np
import pandas as pd
from numpy.random import randn
from scipy import stats
np.random.seed(1)
df = pd.DataFrame(np.random.randint(1, 100,size=(100, 4)))
def st_bc(data):
data_bc = pd.DataFrame()
for column in list(data):
data_bc[column], lam = stats.boxcox(data[column])
return data_bc
st_bc(data = df)发布于 2020-07-17 18:10:48
代码和你正在做的事情都很简单,在这里你可能做不到很多。以下是一些想法:
data[column], _ = stats.boxcox(data[column]).这使得Pandas能够在转换应用到它之后忘记旧数据,从而节省一些内存。不过,这可能没有明显的节省时间。lambda,则计算它是为了最大化结果的日志可能性。我对这个转换一无所知,但取决于参数是如何计算的,以及它意味着什么,可能有一种方法可以更有效地对给定数据进行预计算,从而节省计算时间。不幸的是,当您的代码基本上只有一行长( boxcox调用是这里唯一重要的东西)时,您可以做的事情只有这么多才能使它更快,特别是如果这一行已经在调用高性能的库,比如Scipy。如果速度还不够快,那么您将需要分解底层的算法,并在应用更强的假设时寻找优化的方法,例如假设数据都是非负的,而不是在运行时检查数据,或者能够找到一种更有效的方法来计算最优的lambda。
https://codereview.stackexchange.com/questions/245491
复制相似问题