使用Numpy进行快速索引

3

我有一个包含一些像素索引的数组和一个二进制图像。我想根据相应图像点处的图像值过滤第一个数组。 目前我正在执行以下操作:

mask = np.random.rand(512, 512)
mask[mask < 0.5] = 0
mask[mask >= 0.5] = 1

x = np.random.randint(0, mask.shape[0], 10)
y = np.random.randint(0, mask.shape[1], 10)
img_pts = np.vstack([x, y]).T

occ = np.zeros(len(img_pts))
for i, img_pt in enumerate(img_pts):
    if mask[img_pt[1], img_pt[0]]:
        occ[i] = 1

这绝不是最好的方法。有更快的方法吗?

1个回答

3

将两个数组作为输入,使用img_pts中的数据与mask进行索引操作即可 -

occ = mask[tuple(img_pts.T[::-1])]

或者 -

occ = mask[img_pts[:,1],img_pts[:,0]]

为了得到最终的输出结果为int类型,可以添加.view('i1')。或者对于float,可以使用.astype(float)进行转换。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接