我对我在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用户指南page和wiki page之外,还有更多的prange()文档吗?