我手头有一个最小的问题:$Xw = Y$,其中$X$是我的(训练)* 数据 * 矩阵,$w$是一个向量参数化我的模型。
def solve_lsqr(X,Y):
# something standard
return w
我想执行一种特定类型的交叉验证,即用一组特定的滞后对数据进行子采样(与scikit-learn的混洗子采样方法相反),因此,该函数不是将所有数据传递给solve_lsqr
,而是处理以特定方式选择的数据子集。
我使用python的多处理来并行化我的代码,但我认为我的方法不是最佳的:* 我将整个二次采样数据数组(而不是索引)传递给函数,一旦并行执行,就会完全填满RAM,从而大幅降低性能。*
**我认为将索引集传递给solve_lsqr
更合理,并以某种方式通知它数据矩阵$(X,Y)$**的位置。这需要在多处理库的Pool
对象中的所有工作者之间共享某种部分内存。部分,因为除了$(X,Y)$之外,所有工作者的内部变量本质上是独立的。
我怎样才能在python中实现它呢?用本机多处理库能做到吗?
谢谢你的帮助。
1条答案
按热度按时间ebdffaop1#
解决方案非常简单,只需在
solve_lsqr
中将数据矩阵$X,Y$声明为global
(只读)变量,并使用python切片传递适当的索引。