并行化 numpy 数组中每个单元格的操作
Parallelize operations for each cell in a numpy array
我试图弄清楚哪种方法是并行执行 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 Whosebug 中读到了 numexpr,其中还有 Theano 和 Cython 被引用。 Theano 似乎是一个很好的解决方案,但我找不到适合我的例子。
所以我的问题是:使用并行化和可能的 GPU 计算,改进上述代码的最佳方法是什么?有人可以 post 一些示例代码来执行此操作吗?
我不熟悉按位运算,但这里给出的结果与您的代码相同,并且是矢量化的。
import numpy as np
# make sure it is a numpy.array
v = np.array(v)
# vectorized computation
N = (v >> 7) & 255
我试图弄清楚哪种方法是并行执行 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 Whosebug 中读到了 numexpr,其中还有 Theano 和 Cython 被引用。 Theano 似乎是一个很好的解决方案,但我找不到适合我的例子。
所以我的问题是:使用并行化和可能的 GPU 计算,改进上述代码的最佳方法是什么?有人可以 post 一些示例代码来执行此操作吗?
我不熟悉按位运算,但这里给出的结果与您的代码相同,并且是矢量化的。
import numpy as np
# make sure it is a numpy.array
v = np.array(v)
# vectorized computation
N = (v >> 7) & 255