【发布时间】:2015-04-30 14:35:30
【问题描述】:
可能是一个常见的问题,但如何在 Python 中并行化这个循环?
for i in range(0,Nx.shape[2]):
for j in range(0,Nx.shape[2]):
NI=Nx[:,:,i]; NJ=Nx[:,:,j]
Ku[i,j] = (NI[mask!=True]*NJ[mask!=True]).sum()
所以我的问题是:并行化这段代码最简单的方法是什么?
---------- EDIT LATER------------------
数据示例
import random
import numpy as np
import numpy.ma as ma
from numpy import unravel_index
#my input
Nx = np.random.rand(5,5,5)
#mask creation
mask_positions = zip(*np.where((Nx[:,:,0] < 0.4)))
mask_array_positions = np.asarray(mask_positions)
i, j = mask_array_positions.T
mask = np.zeros(Nx[:,:,0].shape, bool)
mask[i,j] = True
我想通过并行计算 Ku。我的目标是使用 Ku 数组来解决线性问题,所以我必须将掩码值分开(代表我数组的一半)
【问题讨论】:
-
请提供一些示例数据和预期输出。
-
multiprocessing.Pool 是一个很好的起点。
-
顺便说一句,除了实现@hpaulj 的出色答案之外,您可能需要考虑一下,您用5 行制作的面具相当于只写
mask = Nx[:,:,0] < 0.4。
标签: python loops numpy parallel-processing mask