我有一個python函數funz
,每次返回一個不同的長度爲p的數組。 我需要不同的時間運行此函數,然後計算每個值的平均值。如何在一個類中並行化一個for python?
我可以用for循環做到這一點,但它需要很多次。
我想使用庫多處理,但我進入一個錯誤。
import sklearn as sk
import numpy as np
from sklearn.base import BaseEstimator, TransformerMixin
from sklearn import preprocessing,linear_model, cross_validation
from scipy import stats
from multiprocessing import Pool
class stabilize(BaseEstimator,TransformerMixin):
def __init__(self,sim=3,n_folds=3):
self.sim=sim
self.n_folds=n_folds
def fit(self,X,y):
self.n,self.p=X.shape
self.X=X
self.y=y
self.beta=np.zeros(shape=(self.sim,self.p))
self.alpha_min=[]
self.mapper=p.map(self.multiple_cv,[1]*self.sim)
def multiple_cv(self,o):
kf=sk.cross_validation.KFold(self.n,n_folds=self.n_folds,shuffle=True)
cv=sk.linear_model.LassoCV(cv=kf).fit(self.X,self.y)
beta=cv.coef_
alpha_min=cv.alpha_
return alpha_min
我用一個虛擬變量o來告訴我要使用多少個並行進程。 這不是很優雅,也許是錯誤的一部分。 變量X和y已經是類的一部分,所以我沒有參數傳遞給函數multiple_cv。
當我運行程序我得到這個錯誤
Exception in thread Thread-3:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 551, in __bootstrap_inner
self.run()
File "/usr/lib/python2.7/threading.py", line 504, in run
self.__target(*self.__args, **self.__kwargs)
File "/usr/lib/python2.7/multiprocessing/pool.py", line 319, in _handle_tasks
put(task)
PicklingError: Can't pickle <type 'instancemethod'>: attribute lookup __builtin__.instancemethod failed
類是不完整的,但其他的功能應該是indipendent。 – Donbeo