下面对于一个分析模型给出相应的并行(Python Parallel)及多线程(Theard)版本,
为了学术上的代码保密使用了代码混淆工具对代码进行了加密,主要关注点在于如何进行
并行及多线程重组。
下面是示例代码:
from __future__ import division #line:1
import numpy as O0OO00000O0O0OO00 #line:2
from numpy .random import multivariate_normal as O0O000O00O0OOO000 ,random as OO00O00OOO0O00000 ,poisson as OOO0O0O0000000OOO #line:3
from numpy .linalg import eigh as O0O0OO00O00OOOO00 ,norm as O00O0OOO0O00OO0OO ,svd as O00O000OOO00O00OO ,eigvalsh as O00OO00OOOOO0OO00 #line:4
from scipy .stats import expon as OO0OO00OO0000O000 #line:5
import matplotlib .pyplot as O000O00O00O0OOO00 #line:6
from sklearn import linear_model as OO0000000OOO00O0O #line:7
from sklearn .random_projection import SparseRandomProjection as OOO00000O00OOOOO0 #line:10
from sklearn .random_projection import johnson_lindenstrauss_min_dim as O00O0000OOO00OOO0 #line:11
from sklearn .cluster import DBSCAN as O0O0O0O0OO000000O #line:12
from sklearn .isotonic import IsotonicRegression as O00OO000OO0OOO00O #line:13
from sklearn .cluster import spectral_clustering as O0O0OOOOO0O0O000O #line:14
from abc import abstractmethod as O00OOO0OO0OOO00O0 ,ABCMeta as OOO00000OOO00OOO0 #line:16
from multiprocessing import Process as O0OOO000OOOO0O0OO ,Queue as OOOOOO0O00OOOOO00 #line:17
import threading as OOOO00000O00OO0O0 #line:18
from time import time as OO0O0O0OO0000000O ,sleep as OO0OO0O0O00OO0000 #line:19
from time import time as OO0O0O0OO0000000O #line:21
from functools import partial as O0OO0OOOO0OO000OO #line:22
import copy as OOOO0O00OOO0O0OOO #line:23
import pp as O0OOO0OOOOOO0000O #line:24
import os as OO00OOO0000O0O0OO #line:25
def generate_sample (OOOO00000OOOO0O0O ,OO00OOOOO0O0O0OOO ):#line:28
return O0O000O00O0OOO000 (O0OO00000O0O0OO00 .zeros ([OO00OOOOO0O0O0OOO ]),O0OO00000O0O0OO00 .eye (OO00OOOOO0O0O0OOO ),OOOO00000OOOO0O0O )#line:29
def generate_E (O00000O000O0O0000 ,O000O0OO0O0OOOOO0 ,OOO00O0000000OO00 ):#line:32
def O0OO0OO00000OOO0O (OO000O00OOO0000OO ,_OOO0O0000O0O0OO0O ):#line:33
O0OO0OOO00O0O000O =O0OO00000O0O0OO00 .zeros ([OO000O00OOO0000OO ,OO000O00OOO0000OO ])#line:34
for OO0OO000000O0O00O in range (O0OO0OOO00O0O000O .shape [0 ]):#line:35
for OOO00OO00OO000OO0 in range (OO0OO000000O0O00O ):#line:36
O0OO0OOO00O0O000O [OO0OO000000O0O00O ][OOO00OO00OO000OO0 ]=OO00O00OOO0O00000 ()#line:37
for OO0OO000000O0O00O in range (O0OO0OOO00O0O000O .shape [0 ]):#line:39
for OOO00OO00OO000OO0 in range (O0OO0OOO00O0O000O .shape [0 ])[OO0OO000000O0O00O :]:#line:40
O0OO0OOO00O0O000O [OO0OO000000O0O00O ][OOO00OO00OO000OO0 ]=O0OO0OOO00O0O000O [OOO00OO00OO000OO0 ][OO0OO000000O0O00O ]#line:41
O0O0OOO0OOOOO00O0 =O0O0OO00O00OOOO00 (O0OO0OOO00O0O000O )[1 ]#line:43
OO0000000OO0OOOO0 =O0OO00000O0O0OO00 .random .random_sample ((O0OO0OOO00O0O000O .shape [0 ],))*_OOO0O0000O0O0OO0O #line:44
return O0OO00000O0O0OO00 .dot (O0OO00000O0O0OO00 .dot (O0O0OOO0OOOOO00O0 .T ,O0OO00000O0O0OO00 .diag (OO0000000OO0OOOO0 )),O0O0OOO0OOOOO00O0 )#line:46
return O0OO00000O0O0OO00 .dot (O0OO00000O0O0OO00 .dot (O0OO0OO00000OOO0O (OOO00O0000000OO00 .shape [0 ],O00000O000O0O0000 ),OOO00O0000000OO00 ),O0OO0OO00000OOO0O (OOO00O0000000OO00 .shape [1 ],O000O0OO0O0OOOOO0 ))#line:48
def generate_F (OO0O00O0OO000O00O ,OO00OO00O00O000O0 ,OOOOO0OO0OOO0OOO0 ):#line:51
O0OO0O0O0O0000O00 =O0OO00000O0O0OO00 .zeros ([OO0O00O0OO000O00O ,OO00OO00O00O000O0 ])#line:52
for OOO0000OO00OO0OOO in range (O0OO0O0O0O0000O00 .shape [0 ]):#line:53
O0OO0O0O0O0000O00 [OOO0000OO00OO0OOO ,:]=O0O000O00O0OOO000 (OOO0O0O0000000OOO (OOOOO0OO0OOO0OOO0 ,OO00OO00O00O000O0 ),O0OO00000O0O0OO00 .eye (OO00OO00O00O000O0 ))#line:54
return O0OO0O0O0O0000O00 #line:56
def generate_loader (O0O0OOO0000OOOO0O ,O0O000O0OOOO000O0 ,OOO000O00000O000O ):#line:59
O0O00OOO0OOOOO00O =O0OO00000O0O0OO00 .zeros ([O0O0OOO0000OOOO0O ,O0O000O0OOOO000O0 ])#line:60
for O0O0OO0OO0000OO00 in range (O0O00OOO0OOOOO00O .shape [0 ]):#line:61
O0O00OOO0OOOOO00O [O0O0OO0OO0000OO00 ,:]=O0O000O00O0OOO000 (OOO0O0O0000000OOO (OOO000O00000O000O ,O0O000O0OOOO000O0 ),O0OO00000O0O0OO00 .eye (O0O000O0OOOO000O0 ))#line:62
return O0O00OOO0OOOOO00O #line:64
def generate_X (OO0OOOO0OOOO0OO00 ,O0000000000O0O00O ,O000OO0O0000O0OOO ,OO00OOO0O0O00O00O ,OO00OO000O00000OO ,OOOO0O0OOO00OOOO0 ,O0O00O0O00O0OOOO0 ,disp =True ):#line:68
O0O0OO0O00OOOOOOO =generate_E (OOOO0O0OOO00OOOO0 ,O0O00O0O00O0OOOO0 ,generate_sample (OO0OOOO0OOOO0OO00 ,O000OO0O0000O0OOO ))#line:70
OOO00OO00O0OOOO0O =generate_F (OO0OOOO0OOOO0OO00 ,O0000000000O0O00O ,OO00OOO0O0O00O00O )#line:71
OOO0O0OOOO00OO0O0 =generate_loader (O0000000000O0O00O ,O000OO0O0000O0OOO ,OO00OO000O00000OO )#line:72
O000O0OO0OO0O00OO =O0OO00000O0O0OO00 .dot (OOO00OO00O0OOOO0O ,OOO0O0OOOO00OO0O0 )#line:74
O0OOO00000OO00OO0 =O000O0OO0OO0O00OO +O0O0OO0O00OOOOOOO #line:75
O00O000O0OO0OO0O0 =O00O0OOO0O00OO0OO (O000O0OO0OO0O00OO )/O00O0OOO0O00OO0OO (O0OOO00000OO00OO0 )#line:77
if disp :#line:79
OOO000OO0O0OOOOO0 =O00O000OOO00O00OO (O0OOO00000OO00OO0 )[1 ][0 ]#line:80
OOO0O00O00000O00O =O00O000OOO00O00OO (O0O0OO0O00OOOOOOO )[1 ][0 ]#line:81
OOO00OOO000OOO00O =O00O000OOO00O00OO (O000O0OO0OO0O00OO )[1 ][0 ]#line:82
return (O0OOO00000OO00OO0 ,1 -O00O000O0OO0OO0O0 )#line:84
def projected_and_eigen (O0O0OOO00OO000OO0 ,eps =0.5 ,disp =False ):#line:86
OO00O0O000OO00O00 =O00O0000OOO00OOO0 (O0O0OOO00OO000OO0 .shape [0 ],eps =eps )#line:87
OO0OO0O0O0O0O0000 =OO00O0O000OO00O00 #line:88
OO00O0O00O00OO0O0 =OOO00000O00OOOOO0 (n_components =OO0OO0O0O0O0O0000 )#line:89
OOOO00O00OO000OO0 =OO00O0O00O00OO0O0 .fit_transform (O0O0OOO00OO000OO0 )#line:90
return OOOO00O00OO000OO0 #line:92
def generate_bagging_sample_index (O0000OOO0O0000O00 ,O0OOOOOO00000OO00 ,O0OO0O0OOO0O00O00 ,OOOOO0OO00OO0O000 ,OO0000O0O0000OOO0 ):#line:96
OO00OOO00O00O0000 =[]#line:97
for OOO0OOOOO00O000O0 in range (O0OOOOOO00000OO00 ):#line:98
if OOOOO0OO00OO0O000 :#line:100
O0O0O0O00OO0OO000 =O0OO00000O0O0OO00 .random .randint (OO0000O0O0000OOO0 ,O0OO0O0OOO0O00O00 ,1 )[0 ]#line:101
else :#line:102
O0O0O0O00OO0OO000 =O0OO0O0OOO0O00O00 #line:103
OO00OOO00O00O0000 .append (O0OO00000O0O0OO00 .random .randint (O0000OOO0O0000O00 .shape [1 ],size =O0O0O0O00OO0OO000 ))#line:105
return O0OO00000O0O0OO00 .array (OO00OOO00O00O0000 )#line:107
def generate_bagging_sample_array (O00O00O0OO0O0OOO0 ,O000OOO0O00000O00 ,OOOO000000O0O0OO0 ,OOO00O0000O00OO0O ,O0O000OO0O0O0OO0O ):#line:109
OO0OO000O0OOOOO0O =generate_bagging_sample_index (O00O00O0OO0O0OOO0 ,O000OOO0O00000O00 ,OOOO000000O0O0OO0 ,OOO00O0000O00OO0O ,O0O000OO0O0O0OO0O )#line:110
for O00OO0OO0OO0OOOO0 in OO0OO000O0OOOOO0O :#line:111
yield O00O00O0OO0O0OOO0 [O00OO0OO0OO0OOOO0 ].copy ()#line:112
def Bagging_Test_Simple_Func (O00O0O00OOO0OOOO0 ,factor_max_bound =20 ,sample_num =10 ,sample_size =100 ,disp =False ,Type ="forward_stepwise",itertimes =None ,random_split =False ,begin_index =None ):#line:114
O0O00OO000OOO0O00 =dict ()#line:115
def OO0O00OOOO0OOO0O0 (O0OO0OO0OO0000000 ):#line:117
OOO00OO0OOOO0O0O0 =O0OO00000O0O0OO00 .empty (shape =O0OO0OO0OO0000000 .T .shape )#line:118
for OO00O00000O0OO0O0 in range (O0OO0OO0OO0000000 .T .shape [0 ]):#line:119
OOO00OO0OOOO0O0O0 [OO00O00000O0OO0O0 ]=O0OO0OO0OO0000000 .T [OO00O00000O0OO0O0 ][::-1 ]#line:120
return (OOO00OO0OOOO0O0O0 .T ).copy ()#line:122
def O0O000OOOOO0000O0 (OO000OOOOO000OO00 ):#line:124
OOOOOO00000000O00 =None #line:125
for OO0O0O00O00O0OO00 in range (factor_max_bound ,sample_size ):#line:127
OO00OOO000O000OOO =O0OO00000O0O0OO00 .abs (O00OO00OOOOO0OO00 (O0OO00000O0O0OO00 .dot (OO000OOOOO000OO00 [:OO0O0O00O00O0OO00 +1 ],OO000OOOOO000OO00 [:OO0O0O00O00O0OO00 +1 ].T ))[::-1 ])#line:128
if type (OOOOOO00000000O00 )==type (None ):#line:130
OOOOOO00000000O00 =O0OO00000O0O0OO00 .array ((OO00OOO000O000OOO [:-1 ]/OO00OOO000O000OOO [1 :])[:factor_max_bound ]).reshape (1 ,-1 )#line:131
else :#line:132
OOOOOO00000000O00 =O0OO00000O0O0OO00 .append (OOOOOO00000000O00 ,O0OO00000O0O0OO00 .array ((OO00OOO000O000OOO [:-1 ]/OO00OOO000O000OOO [1 :])[:factor_max_bound ]).reshape (1 ,-1 ),axis =0 )#line:133
return OOOOOO00000000O00 #line:135
def OO0O0OO00O0O0OOOO (O00O0OO0OO0O0O0OO ,itertimes =10 ):#line:137
O0O0OOOO00OO0O0OO =None #line:138
for O0000OOOOO0000O00 in range (itertimes ):#line:140
O00O0OO0OO0O0O0OO =projected_and_eigen (O00O0OO0OO0O0O0OO )#line:141
OO0O0000O0O00000O =O0OO00000O0O0OO00 .abs (O00OO00OOOOO0OO00 (O0OO00000O0O0OO00 .dot (O00O0OO0OO0O0O0OO ,O00