私はPythonでマルチプロセッシングを可能にするために次のコードを分割しようとしていますが、実際には私にとって不満足な作業になりつつあります。見つけましたが、一度にすべてのCPUコアで動作するソリューションを見つけられませんでした。Pythonでiterableをマルチプロセッシングする
iterablesを四半期に分割し、parrallelでテストを計算したいと思います。
私のシングルスレッドの例:
import itertools as it
import numpy as np
wmod = np.array([[0,1,2],[3,4,5],[6,7,3]])
pmod = np.array([[0,1,2],[3,4,5],[6,7,3]])
plines1 = it.product(wmod[0],wmod[1],wmod[2])
plines2 = it.product(pmod[0],pmod[1],pmod[2])
check = .915
result = []
for count, (A,B) in enumerate(zip(plines1,plines2)):
pass
test = (sum(B)+10)/(sum(A)+12)
if test > check:
result = np.append(result,[A,B])
print('results: ',result)
私は、これは3×3行列のペアの非常に小さな例で実現するが、私は大きい行列のペアにそれを適用したいと、約かかります計算する時間。助言をいただければ幸いです。
まあ、ある意味では、ループの内側から 'result = np.append(result、[A、B])'を取ります。なぜ、 'list'ではなくnumpy配列を使用していますか?このように追加すると配列とリストの関係が非常に非効率になります。奇妙なことに、 'result = []'も使用しています... –
スケーラビリティと効率性について、私はnumpyを使うことに決めました。私が言ったように、3x3行列は例のためだけです。そして、forループは繰り返しですが、何とか取得しない限り、データは保持されません。 –
はい、しかし 'numpy'はあなたのコードを魔法のようにスケーラブルにしません。このように 'numpy'を使うことは、逆の効果があります。 –