我有一个 numpy 数组heatmap
shape(img_height, img_width)
和另一个 shape 数组bboxes
,(K, 4)
其中K
是一些边界框。每个边界框的定义如下[x_top_left, y_top_left, width, height]
:这是此类数组的示例:
bboxes = np.array([
[0, 0, 4, 7],
[3, 4, 3, 4],
[7, 2, 3, 7]
])
heatmap
最初用零填充。我需要做的是将每个边界框的值 1 放在相应的位置。结果heatmap
应该是:
heatmap = np.array([
[1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0],
[1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0],
[1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0],
[1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0],
[1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0],
[0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0],
[0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
])
需要注意的重要事项:
- 轴 0 对应于图像高度
- 轴 1 对应于图像宽度
我已经使用 python for 循环解决了这个问题,如下所示:
for bbox in bboxes:
# y_top_left:y_top_left + img_height, x_top_left:x_top_left + img_width
heatmap[bbox[1] : bbox[1] + bbox[3], bbox[0] : bbox[0] + bbox[2]] = 1
我想避免使用 python for 循环(如果可能的话)并且能够做这样的事情:
heatmap[bboxes[:,1] : bboxes[:,1] + bboxes[:,3], bboxes[:,0]:bboxes[:,0] + bboxes[:,2]] = 1
有没有办法在 numpy 中进行多次切片?
我知道numpy integer array indexing,但是要生成这样的索引,我也无法避免 python for 循环。