Pythonで多次元配列を並列計算したいと考えています.
100*100の二次元配列などをconcatenateして1つの配列にまとめました.
pool.map関数に渡す前は,tempの形状は以下の通りになるのですが,
python
1temp_T_data=temp_T[0:100] 2#temp_T_data shape =>(100,10201)
pool.map関数に渡した後,以下のように一次元しか渡されていませんでした.
tempと同じdata(100,10201),g(100,100) r_k(100,100) y_k(100,10000)になるようにしたいです.
python
1def solve(data): 2 3 g=data[0:100] 4 r_k=data[100:200] 5 y_k=data[200:10200] 6 rho=data[10200] 7 print("data",data.shape,"g",g.shape,"rk",r_k.shape,"yk",y_k.shape,"rho",rho) 8 # => data(10201,),g(100,) r_k(100,) y_k(100,) 9 #ほしい値はtempと同じdata(100,10201),g(100,100) r_k(100,100) y_k(100,10000)になるようにしたいです. 10 return rho
以下はサンプルコードすべてです.
python
1from multiprocessing import Pool 2import numpy as np 3import sys 4import matplotlib.pyplot as plt 5 6 7nx=100 8ny=100 9 10def solve(data): 11 12 g=data[0:100] 13 r_k=data[100:200] 14 y_k=data[200:10200] 15 rho=data[10200] 16 17 18 print("data",data.shape,"g",g.shape,"rk",r_k.shape,"yk",y_k.shape,"rho",rho) 19 # => data(10201,),g(100,) r_k(100,) y_k(100,) 20 return rho 21 22def main(): 23 24 np.random.seed(0) 25 g=np.random.randn(nx, ny) 26 27 r_k=np.zeros((nx,ny)) 28 y_k=np.zeros((nx*ny,1)) 29 30 rho=1 31 iters=0 32 pool=Pool(processes=10) 33 34 while(iters<2): 35 #g(100,100) 36 #r_k(100,100) 37 #y_kをnp.tileで(10000,100) 38 #rhoをnp.tileとtransposeで(1,100) 39 #行方向にconcatenate 40 41 temp = np.concatenate((g,r_k,np.tile(y_k, (1,ny)),np.tile(rho, (nx,1)).transpose()), axis=0) 42 print("temp.shape",temp.shape) 43 #temp.shape =>(10201,100) 44 45 46 xnew = pool.map(solve, temp.transpose()) 47 print(xnew) 48 49 50 iters = iters + 1 51 52 pool.close() 53 pool.join() 54 55 plt.imshow(g,cmap = "gray") 56 plt.show() 57 58if __name__ == '__main__': 59 main() 60 61

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。