我试图弄清楚哪个是在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计算?可能有人发布了一些示例代码来执行此操作吗?
答案 0 :(得分:4)
我不熟悉按位操作,但这里给出了与代码相同的结果并进行了矢量化。
import numpy as np
# make sure it is a numpy.array
v = np.array(v)
# vectorized computation
N = (v >> 7) & 255