【发布时间】:2016-08-28 13:51:04
【问题描述】:
我有一个与此处提出的问题类似的问题:How to apply a disc shaped mask to a numpy array?。但是,我不想屏蔽单个圆形扇区,而是创建一个具有多个圆形扇区的蒙版(数字是可变的)。这些面具都具有相同的半径,但不同的中心。这些中心的坐标存储在一个 numpy 二维数组中。例如:
maskcenters = array([[1, 1],
[7, 2],
[2, 8]])
现在要围绕单个中心创建一个圆形遮罩(半径 2),我可以简单地使用Bi Rico 给出的解决方案:
import numpy as np
a, b = maskcenters[0]
n = 10
r = 2
y,x = np.ogrid[-a:n-a, -b:n-b]
mask = x*x + y*y <= r*r
其中a和b代表蒙版的中心; n 要屏蔽的数组的大小;和 r 半径。
这将产生如下掩码:
#output
array([[ True, True, True, False, False, False, False, False, False],
[ True, True, True, True, False, False, False, False, False],
[ True, True, True, False, False, False, False, False, False],
[False, True, False, False, False, False, False, False, False],
[False, False, False, False, False, False, False, False, False],
[False, False, False, False, False, False, False, False, False],
[False, False, False, False, False, False, False, False, False],
[False, False, False, False, False, False, False, False, False],
[False, False, False, False, False, False, False, False, False]], dtype=bool)
但是,我想围绕其创建蒙版的中心数量不定。我知道如何使用 for 循环创建多个圆形掩码,但这会减慢代码速度。使用 10x10 数组中的示例掩码中心,我的最佳结果是:
#output
array([[ True, True, True, False, False, False, False, False, True],
[ True, True, True, True, False, False, False, True, True],
[ True, True, True, False, False, False, True, True, True],
[False, True, False, False, False, False, False, True, True],
[False, False, False, False, False, False, False, False, True],
[False, False, True, False, False, False, False, False, False],
[False, True, True, True, False, False, False, False, False],
[ True, True, True, True, True, False, False, False, False],
[False, True, True, True, False, False, False, False, False]], dtype=bool)
知道如何在不使用循环的情况下创建此蒙版吗?
【问题讨论】:
标签: python arrays numpy scipy vectorization