我有个准则
df.select([
pl.all().exclude("elapsed_time_linreg"),
pl.col("elapsed_time_linreg").arr.get(0).suffix("_slope"),
pl.col("elapsed_time_linreg").arr.get(1).suffix("_intercept"),
pl.col("elapsed_time_linreg").arr.get(2).suffix("_resid_std"),
])
解压缩函数的结果
@jit
def linear_regression(session_np: np.ndarray) -> np.ndarray:
w = len(session_np)
x = np.arange(w)
sx = w ** 2 / 2
sy = np.sum(session_np)
sx2 = (w * (w + 1) * (2 * w + 1)) / 6
sxy = np.sum(x * session_np)
slope = (w * sxy - sx * sy) / (w * sx2 - sx**2)
intercept = (sy - slope * sx) / w
resids = session_np - (x * slope + intercept)
return slope, intercept, resids.std()
def get_linreg_aggs(session) -> np.ndarray:
return linear_regression(np.array(session))
df.select(
pl.col("elapsed_time")
.apply(utils.get_linreg_aggs)
.cast(pl.Float32)
.alias("elapsed_time_linreg")
)
它在Polars 17. 15上运行得很完美,但自从我将它升级到最新的(0. 18. 4)后,它就停止工作了。现在我得到以下错误,不知道如何解决这个问题:
AttributeError: 'ExprArrayNameSpace' object has no attribute 'get'
有没有办法在不降低版本的情况下修复它?或者更有效地从这个函数创建一堆列的方法?
我想用lru-cache缓存计算结果,但由于polars使用多处理,idk如果有帮助的话。
1条答案
按热度按时间qv7cva1a1#
.arr
命名空间是v0.18.0
中的renamed to.list
函数现在是
.list.get()