在Cython中选择性地复制带有prange的ndarray行

时间:2014-04-14 08:12:39

标签: python numpy parallel-processing cython

我对我在Cython中编写的相对操作有疑问,我想要并行化,但我还没有找到任何似乎指向正确方向的文档或问题。

简单地说,我想根据条件将一个数组的子集复制到另一个数组中。

我有一个大的点矩阵,对于每个点,我想检查它是否在中心点的某个距离内,如果是,则将其复制到我的结果矩阵中。 out_points已分配到与输入extent_points相同的大小,因此我知道它适合。所有变量都cdef为适当的整数和ndarray。

for pp in range(extent_points.shape[0]):
    meets_condition = 1
    for ii in range(extent_points.shape[1]): # check if in bounds
        if extent_points[pp,ii] < (epicenter[ii] - radius) or \
           extent_points[pp,ii] > (epicenter[ii] + radius):
            meets_condition = 0; break
    if meets-condition == 1: # if in bounds, then copy to output matrix
        for ii in range(extent_points.shape[1]):
            out_points[out_count,ii] = extent_points[pp,ii]
        out_count += 1
return out_points[:out_count, :]

看起来并行地要平行检查这个条件并不是很平行,但是我不清楚如何并行化副本。我是否应该在输入上标记一个列,如果它不应该被复制,然后再次迭代并复制?除了简短的Cython用户指南pagewiki page之外,还有更多的prange()文档吗?

0 个答案:

没有答案