并行化numpy数组中每个单元格的操作

时间:2015-05-18 11:52:29

标签: python numpy parallel-processing theano

我试图弄清楚哪个是在2D numpy数组中为每个单元格执行单个操作并行化的最佳方法。

特别是,我需要对数组中的每个单元格执行按位操作。

这就是我使用单个for周期所做的事情:

for x in range(M):
    for y in range(N):
        v[x][y] = (v[x][y] >> 7) & 255

我找到了一种使用vectorize方法执行相同操作的方法:

def f(x):
    return (x >> 7) & 255
f = numpy.vectorize(f)

v = f(v)

但是,使用矢量化似乎不会提高性能。

我在this answer on StackOverflow中读到了 numexpr ,其中还引用了 Theano Cython Theano 特别是一个很好的解决方案,但我找不到适合我案例的例子。

所以我的问题是:哪个是改进上述代码的最佳方法,使用并行化和可能的GPU计算?可能有人发布了一些示例代码来执行此操作吗?

1 个答案:

答案 0 :(得分:4)

我不熟悉按位操作,但这里给出了与代码相同的结果并进行了矢量化。

import numpy as np

# make sure it is a numpy.array
v = np.array(v)

# vectorized computation
N = (v >> 7) & 255