如何从两个断点创建长度为n的布尔掩码而不使用for循环?



我试图从断点对数组创建一个布尔掩码数组。因此,结果应该是长度为n的布尔掩码,在两个断点之间具有真值。我可以通过编写一个for循环来迭代地解决这个问题,但我想找到它的矢量化numpy等效。

mask = np.array([[False, False, False, False, False],
[False, False, False, False, False]])
breakpoints = np.array([[1, 3],
[2, 4]])
for i, bp in enumerate(breakpoints):
mask[i, bp[0]:bp[1]] = True

输出:

array([[False,  True,  True, False, False],
[False, False,  True,  True, False]])

理想情况下,我想用numpy中的索引和数组操作来解决这个问题,但我无法找到正确的方法。

我希望这个例子是清楚的,谢谢你的任何帮助!

您可以使用以下技巧:

>>> breakpoints = np.array([[1, 3],
...                         [2, 4]])
>>> output_width = 5
>>> idx = np.arange(output_width)
>>> (breakpoints[:,[0]] <= idx) & (idx < breakpoints[:,[1]])
array([[False,  True,  True, False, False],
[False, False,  True,  True, False]])

最新更新