微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有一种聪明的方法可以并行化ndarray上的复杂函数吗? 简体工作示例

如何解决有一种聪明的方法可以并行化ndarray上的复杂函数吗? 简体工作示例

python中存在各种各样的可能性来提高您的代码性能(例如广播,numba之类的程序包。但是据我所知,这些方法都依赖于代码基本,例如使用numpy.ndarraynumpy.linalg功能

在我的特定情况下,我使用statsmodels ThetaModel来预测(很多!)时间序列,这些时间序列分组在ndarray中。

有什么聪明的方法可以提高代码性能/并行化代码

目前,我正在使用列表理解功能


(简体)工作示例

import numpy as np
from statsmodels.tsa.forecasting.theta import ThetaModel

def thetaForecast(series):
    model = ThetaModel(series,period=50,deseasonalize=True,use_test=False).fit()
    forecast = model.forecast(steps=len(series))
    return forecast
    
data = np.random.randn(500,10) # 10 time series each of length 500 (dimensions reduced here for simplification)
dataForecast = np.array([thetaForecast(col) for col in data.transpose()])

与这种稍微简化的版本相比,只要功能发挥作用,我的函数thetaForecast实际上需要多个参数。

PS:我不是经验丰富的stackoverflow用户。欢迎改进我的问题的技巧:)

解决方法

您是否尝试过使用多处理?除非ThetaModel.forecast()发布GIL(如果它是用C或Fortran实现的,否则会释放GIL),否则多处理是并行化GIL的主要方法。

或者当然,您可以在Numba,C,C ++或Fortran中重新实现自己的Forecast()并自行释放GIL,然后您可以在单个进程中使用多个线程。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。