256x256x256
各要素が行列である Numpy 配列があります。multiprocessing
これらの各行列に対していくつかの計算を行う必要があり、モジュールを使用して速度を上げたいと考えています。
これらの計算の結果は、元の配列の256x256x256
要素にある行列の結果を新しい配列[i,j,k]
の要素に配置する必要があるため、元の配列と同じように配列に格納する必要があります。[i,j,k]
これを行うには、疑似的な方法で記述できるリストを作成し、[array[i,j,k], (i, j, k)]
それを関数に渡して「マルチプロセス」にしたいと考えています。matrices
これが元の配列から抽出されたすべての行列のリストであり、計算を行う関数であると仮定するとmyfunc
、コードは次のようになります。
import multiprocessing
import numpy as np
from itertools import izip
def myfunc(finput):
# Do some calculations...
...
# ... and return the result and the index:
return (result, finput[1])
# Make indices:
inds = np.rollaxis(np.indices((256, 256, 256)), 0, 4).reshape(-1, 3)
# Make function input from the matrices and the indices:
finput = izip(matrices, inds)
pool = multiprocessing.Pool()
async_results = np.asarray(pool.map_async(myfunc, finput).get(999999))
map_async
ただし、実際にはこの巨大なリストを最初に作成しているようですfinput
。私のCPUはあまり機能していませんが、メモリとスワップは数秒で完全に消費されます。これは明らかに私が望んでいるものではありません.
最初に明示的に作成する必要なく、この巨大なリストをマルチプロセッシング関数に渡す方法はありますか? または、この問題を解決する別の方法を知っていますか?
本当にありがとう!:-)