Python for 循环多处理

嗯嗯

我有一个矩阵矩阵,我需要对其进行计算(即 ax x y x z x z 矩阵,我需要对每个 z x z 矩阵执行计算,因此 x*y 总运算)。目前,我正在遍历矩阵的前两个维度并执行计算,但它们是完全独立的。有没有一种方法可以并行计算这些,而无需事先知道会有多少这样的矩阵(即 x 和 y 未知)。

国际商会

是的; 请参阅多处理模块。这是一个示例(根据文档中的示例进行调整以适合您的用例)。z = 1为了简单起见,在这里假设,因此f需要一个标量。)

from multiprocessing import Pool

# x = 2, y = 3, z = 1 - needn't be known in advance
matrix = [[1, 2, 3], [4, 5, 6]]

def f(x):
    # Your computation for each z-by-z submatrix goes here.
    return x**2

with Pool() as p:
    flat_results = p.map(f, [x for row in matrix for x in row])
    # If you don't need to preserve the x*y shape of the input matrix,
    # you can use `flat_results` and skip the rest.
    x = len(matrix)
    y = len(matrix[0])
    results = [flat_results[i*y:(i+1)*y] for i in range(x)]

# Now `results` contains `[[1, 4, 9], [16, 25, 36]]`

这将x * y在多个进程之间划分计算(每个 CPU 内核一个;这可以通过为 提供参数来调整Pool())。

根据您在做什么,请考虑首先使用numpy尝试矢量化操作(而不是 for 循环)您可能会发现它的速度足以使多处理变得不必要。(如果matrix在这个例子中是一个 numpy 数组,代码就是results = matrix**2.)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章