質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

並列処理

複数の計算が同時に実行される手法

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

1回答

1535閲覧

pythonにおいてmultiprocessingを用いた並列処理で2次元配列を渡したい.

masaosa

総合スコア18

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

並列処理

複数の計算が同時に実行される手法

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/05/28 05:06

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

単に渡したいのであれば、

xnew = pool.map(solve, [temp.transpose()])

のように書くことはできます。

ただし、こうすることで得られるパフォーマンス上のメリットは特に存在しません。

投稿2021/05/28 05:25

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問